当前位置: 首页 > article >正文

SQL基础应用

MySQL内置的功能

  • 连接数据库

-u

-p

-S

-h

-P

-e

<

本地登录:

mysql -uroot -p密码 -S /tmp/mysql.sock

远程登录:

mysql -u用户名 -p密码 -hMySQLIP地址 -P3306

免交互执行sql语句:

mysql -u用户名 -p密码 -e "show databases;"

恢复数据:

mysql -uroot -p123.com < /root/world.sql

  • 内置命令

help                        打印mysql帮助

\c  ctrl+c                结束上个命令运行

\q quit; exit; ctrl+d   退出mysql

\G                           将数据竖起来显示

select user,host from mysql.user \G

source                     恢复备份文件    

将world.sql拖入/root目录

source /root/world.sql

SQL基础应用

  • SQL介绍

结构化的查询语言

关系型数据库通用的命令

遵循SQL92的标准(SQL_MODE)

  • SQL常用种类

DDL   数据定义语言    create  drop  alter

DCL   数据控制语言    grant  revoke

DML   数据操作语言   insert delete  update

DQL   数据查询语言    select

字符集 (charset)

相当于MySQL的密码本(编码表)

查看所有字符集:

show charset;

utf8            : 3个字节

utf8mb4 (建议): 4个字节,支持emoji

创建数据库,同时指定字符集:

create database hehe default charset utf8mb4;

修改默认字符集:

alter database hehe default charset utf8mb4;

排序规则(collation)

查看所有排序规则:

show collation;

对于英文字符串的,大小写的敏感

utf8mb4_general_ci            大小写不敏感

utf8mb4_bin                      大小写敏感(存拼音,日文)

针对已有的数据库修改排序规则:

alter database hehe collate utf8mb4_bin;

数据类型介绍

  • 数字

整数:

tinyint 0-255

int    -2^32-2^32

浮点数:

float

  • 字符串

char(100):

定长字符串类型,不管字符串长度多长,都立即分配100个字符长度的存储空间,未占满的空间使用"空格"填充

varchar(100):

变长字符串类型,每次存储数据之前,都要先判断一下长度,按需分配此盘空间,会单独申请一个字符长度的空间存储字符长度(少于255,如果超过255以上,会占用两个存储空间)

少于255个字符串长度,定长的列值,选择char

多于255字符长度,变长的字符串,可以选择varchar

enum 枚举数据类型,数据不能为数字

address enum('sz','sh','bj'.....)

                  1    2    3  

悬念,以上数据类型可能会影响到索引的性能

  • 时间

datetime:

范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999

timestamp:

范围为从 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999

DDL的应用

  • 库定义规范

库名使用小写字符

库名不能以数字开头

不能是数据库内部的关键字

必须设置字符集和校对集.

  • 库的定义

创建数据库:

create database zabbix charset utf8mb4 collate utf8mb4_bin;

查看库情况:

show databases;

show create database zabbix;

修改数据库字符集:

注意: 一定是从小往大了改,比如utf8--->utf8mb4

目标字符集一定是源字符集的严格超级

create database test;

show create database test;

alter database test charset utf8mb4 collate utf8mb4_bin;

show create database test;

删除数据库(不代表生产操作):

drop database test;

  • 表定义规范

表名小写字母,不能数字开头

不能是保留字符,使用和业务有关的表名

选择合适的数据类型及长度

每个列设置 NOT NULL + DEFAULT .对于数据0填充,对于字符使用有效字符串填充

每个列设置注释

表必须设置存储引擎和字符集

主键列尽量是无关列数字列,最好是自增长

enum类型不要保存数字,只能是字符串类型

  • 表的定义

列属性

PRIMARY KEY : 主键约束,表中只能有一个,非空且唯一.

NOT NULL    : 非空约束,不允许空值

UNIQUE KEY  : 唯一键约束,不允许重复值

DEFAULT     : 一般配合 NOT NULL 一起使用.

UNSIGNED    : 无符号,一般是配合数字列,非负数

COMMENT     : 注释

AUTO_INCREMENT : 自增长的列

注:默认自增列增量为1,初始值也为1,但可以用下列参数修改

auto_increment_increment=10   增量为10

auto_increment_offset=10     初始值为10

创建表:

use zabbix;

create table stu (

id int primary key not null auto_increment comment '学号',

sname varchar(255) not null comment '姓名',

age tinyint unsigned not null default 0 comment '年龄',

gender enum('m','f','n') not null default 'n' comment '性别',

intime datetime not null default now() comment '入学时间'

) engine innodb charset utf8mb4;

查询建表信息:

show tables;              ——显示所有表

show create table stu;  ——显示创表语法、存储引擎、字符集

desc stu;   ——显示表的列结构

创建一个和stu表结构一样的表:

create table test like stu;

删表(不代表生产操作):

drop table test;

修改:

在stu表中添加qq列:

alter table stu add qq varchar(20) not null comment 'qq号';

在sname后加微信列:

alter table stu add wechat varchar(64) not null unique comment ' 微信号' after sname;

在id列前加一个新列num:

alter table stu add num int not null unique comment '身份证' first;

desc stu;

把刚才添加的列都删掉(危险,不代表生产操作) :

alter table stu drop num;

alter table stu drop qq;

alter table stu drop wechat;

desc stu;

修改sname数据类型的属性:

alter table stu modify sname varchar(64) not null comment '姓名';

将gender 改为 sex 数据类型改为 CHAR 类型:

alter table stu change gender sex char(4) not null comment '性别';

desc stu;

  • DCL

创建用户并赋权:

grant all on hehe.* to zhangsan@'%' identified by '123.com';

撤销删除权限:

生产中屏蔽delete功能,使用revoke去除用户drop和delete权限

revoke drop,delete on hehe.* from zhangsan@'%';

查看权限:

show grants for zhangsan@'%';

查看用户:

select user,host from mysql.user;

  • DML

insert:

desc stu;

偷懒方法:

insert stu values(1,'zs',18,'m',now());

规范方法:

insert into stu(id,sname,age,sex,intime) values(2,'ls',19,'f',now());

针对性的录入数据:

insert into stu(sname,age,sex) values('w5',11,'m');

一次性录入多行:

insert into stu(sname,age,sex) values

('aa',11,'m'),

('bb',12,'f'),

('cc',13,'m');

update(一定要加where条件):

将所有的sname改为aaa:

update stu set sname='aaa';

select * from stu;

将id为6的sname改为bb:

update stu set sname='bb' where id=6;

select * from stu;

delete (一定要有where条件):

删除指定id的行:

delete from stu where id=6;

select * from stu;

删除stu表:

delete from stu;

truncate和delete的区别:

都是删除表中行记录,但delete不会重置自增列,会生成日志

truncate不能删除某行,只会删除全部,不做日志,重置自增列。

truncate table stu;

语法练习

create database school default charset utf8mb4 collate utf8mb4_bin;

use school;

student :学生表

sno:学号

sname:学生姓名

sage:学生年龄

ssex:学生性别

create table student (

sno int not null primary key auto_increment comment '学号',

sname varchar(20) not null comment '学生姓名',

sage int not null comment '学生年龄',

ssex char(4) not null comment '学生性别');

teacher :教师表

tno:教师编号

tname:教师名字

create table teacher (

tno int not null,

tname varchar(20));

course :课程表

cno:课程编号

cname:课程名字

tno:教师编号

create table course (

cno int not null,

cname varchar(20) not null,

tno int not null);

sc :成绩表

sno:学号

cno:课程编号

score:成绩

create table sc (

sno int not null,

cno int not null,

score int not null);

insert into student(sno,sname,sage,ssex) values(1,'zhang3',18,'m');

insert into student(sno,sname,sage,ssex) values

(2,'zhang4',18,'m'),

(3,'li4',18,'m'),

(4,'wang5',19,'f');

insert into student values

(5,'zh4',18,'m'),

(6,'zhao4',18,'m'),

(7,'ma6',19,'f');

insert into student(sname,sage,ssex) values

('maliu',20,'m'),

('zhuqi',20,'f'),

('sunjiu',25,'m');

insert into teacher(tno,tname) values

(101,'laowu'),

(102,'laoxia'),

(103,'laoli');

desc course;

insert into course(cno,cname,tno) values

(1001,'linux',101),

(1002,'python',102),

(1003,'mysql',103);

desc sc;

insert into sc(sno,cno,score) values

(1,1001,80),

(1,1002,59),

(2,1002,90),

(2,1003,100),

(3,1001,99),

(3,1003,40),

(4,1001,79),

(4,1002,61),

(4,1003,99),

(5,1003,40),

(6,1001,89),

(6,1003,77),

(7,1001,67),

(7,1003,82),

(8,1001,70),

(9,1003,80),

(10,1003,96);

select * from student;

select * from teacher;

select * from course;

select * from sc;


http://www.kler.cn/a/465417.html

相关文章:

  • vue3 拆信封动画
  • C# 设计模式(结构型模式):桥接模式
  • 在arm平台Euler系统上编译安装ffmpeg
  • 【网络安全 | 漏洞挖掘】绕过电子邮件确认实现预账户接管
  • web漏洞之文件包含漏洞
  • 力扣--494.目标和
  • javaEE-网络原理-1初识
  • Django 项目中的高效日志管理:从配置到实践
  • Windows平台ROBOT安装
  • Socket套接字
  • Celeborn和HDFS、YARN混合部署
  • 算法 Class 006(二分搜索)
  • SQL 基础教程 - SQL ORDER BY 关键字
  • 华为的数字化转型框架和数字化转型成熟度评估方法
  • 在C语言中使用伪终端与bash交互
  • MATLAB 车牌自动识别系统设计 图像分割与图像增强方法 车牌识别
  • linux网络 | 深度学习http的相关概念
  • k8s基础(2)—Kubernetes-Namespace
  • JAVA学习笔记_Redis进阶
  • 【数据仓库金典面试题】—— 包含详细解答
  • SQL Server导出和导入可选的数据库表和数据,以sql脚本形式
  • UML之关联
  • 【数据结构】双向循环链表的使用
  • springboot集成阿里云短信服务
  • CentOS — 目录管理
  • 瑞_Linux中部署配置Java服务并设置开机自启动