MySQL-SQL语法基础

时间:2021-08-23 00:03:16

一、客户端命令

1.1、mysql命令

-u  -p  -S  -h  -P  -e 
mysql -uroot -p -e "show status"

1.2、接受用户命令

help 
G 
ctrl c  #5.7 以上版本,结束上条命令运行,类似linux 
ctrl d  q   exit quit
use  
source	source /root/world.sql

系统相关命令:

List of all MySQL commands:
Note that all text commands must be first on line and end with ‘;‘
?         (?) Synonym for `help‘.
clear     (c) Clear the current input statement. 
connect   (r) Reconnect to the server. Optional arguments are db and host.
delimiter (d) Set statement delimiter.	#存储过程及函数
edit      (e) Edit command with $EDITOR.
ego       (G) Send command to mysql server, display result vertically.
exit      (q) Exit mysql. Same as quit.
go        (g) Send command to mysql server.
help      (h) Display this help.
nopager   (n) Disable pager, print to stdout.
notee     (t) Don‘t write into outfile.
pager     (P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (p) Print current command.
prompt    (R) Change your mysql prompt.
quit      (q) Quit mysql.
rehash    (#) Rebuild completion hash.
source    (.) Execute an SQL script file. Takes a file name as an argument.
status    (s) Get status information from the server.
system    (!) Execute a system shell command.
tee       (T) Set outfile [to_outfile]. Append everything into given outfile.
use       (u) Use another database. Takes database name as argument.
charset   (C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (W) Show warnings after every statement.
nowarning (w) Don‘t show warnings after every statement.

二、SQL分类

SQL: 结构化查询语言(Structured Query Language)

DDL : 数据定义语言(Data define Language)
DCL : 数据控制语言(Data Control Language)
DML : 数据操作语言(Data Manipulation Language)
DQL : 数据查询语言(Data QueryLanguage)

三、DDL:数据定义语言

3.1、create  database语句

MySQL-SQL语法基础

3.1.1、示例

CREATE DATABSE wordpress CHARSET  utf8;	#可以指定字符集及排序规则

3.1.2、开发规范

(1)  库名字必须小写,不能有数字开头,不要超过16个字符 *****
(2)  库名必须和业务有关
(3)  建库时必须添加字符集
(4)  生产中禁止DROP命令
(5)  做变更类操作,需要提前备份

3.2、drop  database语句(危险)

3.3、alter  database语句

3.3.1、示例

#例如:更改库的字符集(utf8 ----> utf8mb4)
alter database abc charset utf8mb4;
alter database abc character set utf8mb4;

3.4、create  table语句

MySQL-SQL语法基础

3.4.1、常见数据类型

1)数字类

TINYINT   #-128~127   ,1-256
INT       # -2^31~2^31-1     2^32 正数

2)字符类

char(定长)    
varchar(变长)
enum(‘‘,‘‘.....)		#枚举类型

char和varchar区别?

char(11):定长长度的字符串类型
	(1)11 这个数字,表示的是字符显示长度,11是个阈值,
	(2)存储数据时,会立即分配11个字符串长度的磁盘空间,存不满,用空格填充.	
	注释:
		磁盘空间,utf8 每个字符都是占三个字节长度,utf8mb4,每个字符占4个字节
	(3)应用场景
	短字符串,固定长度的.

varchar(20): 可变长度的字符串类型
	(1)20这个数字,表示的是字符显示长度,20是个阈值
	(2)存储数据时,比如:zhangsan,SQL引擎会数一下多少个,然后再按照长度分配存储空间,额外开辟1个字节存储字符长度,超过255个字符,字符长度需要2个字节存储
	(3) 应用场景
		变长长度的字符串存储.

#char和varchar选择问题?
	短字符串,固定长度的,选择char
	变长长度的字符串,选择varchar

enum(‘‘,‘‘.....):枚举类型

enum(‘heilongjiang‘,‘jilin‘,‘liaoning‘,.....)
		1             2         3
(1) 业务当中的数据,限定在某个范围内的值时,值越多性能越好
(2) 不建议存储数字: https://dev.mysql.com/doc/refman/8.0/en/enum.html
(3) enum 的值,相当于一个列表,会自动生成枚举索引.
将来表中存储数据时,只需要存储索引号就可以.减少了磁盘空间的消耗,也减少了聚集索引树的高度
(4)使用enum,尽量是一次性规划好,少去改enum
(5)必须开启SQL_MODE严格模式(5.7以前)

3)时间类型

1、date
2、time 
3、year
4、datatime 
5、timestamp

#datetime与timestamp区别
datetime类型取值范围:1000-01-01 00:00:00 到 9999-12-31 23:59:59
timestamp类型取值范围:1970-01-01 00:00:00 到 2037-12-31 23:59:59(经过测试得出范围为 1970-01-01 08:00:01 到2038-01-19 11:14:07)

4)二进制类

3.4.2、示例

#一个标准的建表语句:
USE abc;
CREATE TABLE stu(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT ‘学号‘,
sname VARCHAR(20) NOT NULL COMMENT ‘学生姓名‘,
sage  TINYINT  UNSIGNED COMMENT ‘学生年龄‘,
gender ENUM(‘m‘,‘f‘,‘n‘) NOT NULL DEFAULT ‘n‘ COMMENT ‘性别‘,
telnum CHAR(11) NOT NULL COMMENT ‘手机号‘,
intime DATETIME NOT NULL DEFAULT NOW()
)ENGINE INNODB CHARSET utf8;

#其他建表语句:
create table t1 like student;			#创建与student表结构相同的表
insert into t1 select * from student;	#将student表中的数据插入到t1中

create table t3 select * from student;	#与 student表结构数据相同,但索引等约束条件不会携带过来

3.4.2、表及列属性

1)表属性

ENGINE INNODB
#注:在 5.5以前,默认的引擎类型是MyISAM,5.5以后默认是InnoDB

CHARSET utf8;	

2)列属性

NOT NULL: 非空约束
	作用: 此列不能录入空值,我们建议尽量所有列都设置为非空,主要是影响了索引的应用
	如果实在不知道填写什么值,可以使用0填充,一般情况会配合default来使用.

Unique key: 唯一键(索引)约束
	作用:此列录入数据时,不能有重复值.
	例如:手机号,QQ号
primary key:主键(聚集索引)约束
	作用:此列数据录入时,既非空又唯一
	一般情况下是id,而且是自动增长的列
	使用方法: NOT NULL AUTO_INCREMENT PRIMARY key
	开发规范要求: 在建表的时候一定要指定主键

3.5、drop  table语句(危险)

3.6、alter  table语句

3.6.1、示例

1)修改表的字符集

ALTER TABLE stu CHARSET utf8mb4;
SHOW CREATE TABLE stu;

2)修改表的存储引擎

ALTER TABLE  stu ENGINE MYISAM;
ALTER TABLE  stu ENGINE INNODB;
#扩展:此命令除了可以修改引擎,还可以触发InnoDB表的碎片整理
ALTER TABLE stu ENGINE tokudb;

3)修改表名

ALTER TABLE stu RENAME student;
DESC student;

4)添加列和列定义

#添加单列及定义
ALTER TABLE student  ADD  age INT;

#添加多列及定义
ALTER TABLE student ADD gender VARCHAR(20) , ADD  qq INT;
-----------------------------------------------------------------

#指定位置添加列
#表首列添加一列
ALTER TABLE student ADD classid VARCHAR(20) FIRST;

#在age列后面添加一个telnum列
ALTER TABLE student ADD telnum INT AFTER age;

#在sname列前面添加一个birthday列(没有before的定义,转换为某列的前面)
ALTER TABLE student ADD birthday VARCHAR(30)  AFTER sid;

5)删除列及列定义

ALTER TABLE student DROP age;
ALTER TABLE student DROP gender;

6)修改列及列定义

#将birthday 数据类型替换为 DATETIME
ALTER TABLE student MODIFY birthday DATETIME ;
DESC student;

#将birthday列名字改为birth
ALTER  TABLE student CHANGE birthday birth DATETIME;	#同时可以更改数据类型

3.7、truncate  table语句(危险)

3.8、DDL小结

3.8.1、库的定义常用命令

create database
drop database 
alter  database

show databases;
show create database

3.8.2、表的定义常用命令

create table 
drop  table
alter  table

show tables 
show create table
desc 
show table status from abc;	#查看库中表的状态

MySQL-SQL语法基础

四、DCL : 数据控制语言

常用DCL命令:

grant 
revoke 
lock
等

五、DML : 数据操作语言

5.1、insert语句

5.1.1、示例

1)规范的插入语句(所有字段列出,并与值对应)

INSERT INTO student(id ,NAME,sage,gender,telnum,intime,qq) VALUES (1,‘zhangsan‘,18,‘m‘,‘110‘,NOW(),‘123456‘);

2)简化写法(不写字段,值按字段顺序录入)

INSERT INTO student VALUES (2,‘li4‘,19,‘m‘,‘119‘,NOW(),‘123455‘);

3)有default 或auto_increment,选择性的录入

INSERT INTO student(NAME,sage,telnum,qq) VALUES (‘wang5‘,20,‘120‘,‘123‘);

4)录入多行数据(生产批量录入建议方法)

如要录入1000w行数据,我们通常会拆成多个工程(事务,拆成1w行作为一个工程),批量录入

INSERT INTO student(NAME,sage,telnum,qq)
VALUES 
(‘ma6‘,20,‘121‘,‘1232334‘),
(‘zhao4‘,22,‘231‘,‘1212312‘),
(‘qian7‘,23,‘2222‘,‘12312344‘);

5.2、update语句

切记: UPDATE 语句在SQL92标准中是必须加where,否则全表修改

5.2.1、示例

1)更改字段的值

UPDATE student SET gender=‘f‘ WHERE id=3;