第二十天:mysql基本语法
一、语法标准
1、数据库对象和命名
数据库的组件(对象):
数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等
命名规则:
必须以字母开头,后续可以包括字母,数字和三个特殊字符(# _ $)
不要使用MySQL的保留字
2、SQL语句分类
DDL: Data Defination Language 数据定义语言
CREATE,DROP,ALTER
DML: Data Manipulation Language 数据操纵语言
INSERT,DELETE,UPDATE
软件开发:CRUD
DQL:Data Query Language 数据查询语言
SELECT
DCL:Data Control Language 数据控制语言
GRANT,REVOKE
TCL:Transaction Control Language 事务控制语言
COMMIT,ROLLBACK,SAVEPOINT
3、SQL语句构成
1 2 3 | SELECT * #SELECT子句 FROM products #FROM子句 WHERE price>666 #WHERE子句 |
获取SQL 命令使用帮助:
官方帮助:https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html
4、字符集和排序
早期MySQL版本默认为 latin1,从MySQL8.0开始默认字符集已经为 utf8mb4
查看支持所有字符集:
1 2 | SHOW CHARACTER SET; SHOW CHARSET; |
查看当前默认字符集
1 | show variables like 'character%' ; |
查看支持所有排序规则:
1 2 3 4 | SHOW COLLATION; #注意 utf8_general_ci不区分大小写 utf8_bin 区分大小写 |
查看当前使用的排序规则
1 | SHOW VARIABLES LIKE 'collation%' ; |
设置服务器默认的字符集,
1 2 3 | vim /etc/my.cnf [mysqld] character- set -server=utf8mb4 |
设置mysql客户端默认的字符集
1 2 3 4 5 6 7 | vim /etc/my.cnf #针对mysql客户端 [mysql] default -character- set =utf8mb4 #针对所有MySQL客户端 [client] default -character- set =utf8mb4 |
二、数据库管理
1、创建数据库
1 2 3 | CREATE DATABASE | SCHEMA [IF NOT EXISTS] 'DB_NAME' CHARACTER SET 'character set name' COLLATE 'collate name' ; |
2、修改数据库
1 | ALTER DATABASE DB_NAME character set utf8; |
3、删除数据库
1 | DROP DATABASE | SCHEMA [IF EXISTS] 'DB_NAME' ; |
4、查看数据库列表
1 | SHOW DATABASES; |
三、数据类型
1、整数型
1 2 3 4 5 6 7 8 9 10 11 | tinyint(m) 1个字节 范围(-128~127) smallint (m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~8388607) int (m) 4个字节 范围(-2147483648~2147483647) bigint (m) 8个字节 范围(+-9.22*10的18次方) 上述数据类型,如果加修饰符unsigned后,则最大值翻倍 如:tinyint unsigned的取值范围为(0~255) int (m)里的m是表示 SELECT 查询结果集中的显示宽度,并不影响实际的取值范围,规定了MySQL的一些 交互工具(例如MySQL命令行客户端)用来显示字符的个数。对于存储和计算来说, Int (1)和 Int (20)是 相同的 BOOL,BOOLEAN:布尔型,是TINYINT(1)的同义词。zero值被视为假,非zero值视为真 |
2、浮点型(float和double),近似值
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位, 注意: 小数点不占用总个数
double(m,d) 双精度浮点型16位精度(8字节) m总个数,d小数位, 注意: 小数点不占用总个数
设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以
实际为准,即6位
3、定点数
在数据库中存放的是精确值,存为十进制
格式 decimal(m,d) 表示 最多 m 位数字,其中 d 个小数,小数点不算在长度内
浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。float使用4个字节存储。double占用
8个字节
4、字符串(char,varchar,text)
char(n) 固定长度,最多255个字符,注意不是字节
varchar(n) 可变长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符
BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节
VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节
内建类型:ENUM枚举, SET集合
5、二进制数据BLOB
BLOB和text存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob以二进制方式存储,
不分大小写
BLOB存储的数据只能整体读出
TEXT可以指定字符集,BLOB不用指定字符集
6、日期时间类型
date 日期 '2008-12-2'
time 时间 '12:25:36'
datetime 日期时间 '2008-12-2 22:06:44'
timestamp 自动存储记录修改时间
YEAR(2), YEAR(4):年份
timestamp 此字段里的时间数据会随其他字段修改的时候自动刷新,这个数据类型的字段可以存放这
条记录最后被修改的时间
7、修饰符
NULL 数据列可包含NULL值,默认值
NOT NULL 数据列不允许包含NULL值,相当于网站注册表中的 * 为必填选项
DEFAULT 默认值
PRIMARY KEY 主键,所有记录中此字段的值不能重复,且不能为NULL
UNIQUE KEY 唯一键,所有记录中此字段的值不能重复,但可以为NULL
CHARACTER SET name 指定一个字符集
适用数值型的修饰符:
AUTO_INCREMENT 自动递增,适用于整数类型, 必须作用于某个 key 的字段,比如primary key
UNSIGNED 无符号
四、DDL语句
1、创建表
CREATE TABLE
1 2 3 4 5 6 7 8 9 | CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1 修饰符, col2 type2 修饰符, ...) #字段信息 col type1 PRIMARY KEY (col1,...) INDEX (col1, ...) UNIQUE KEY (col1, ...) #表选项: ENGINE [=] engine_name ROW_FORMAT [=] { DEFAULT | DYNAMIC |FIXED|COMPRESSED|REDUNDANT|COMPACT} |
Storage Engine是指表类型,也即在表创建时指明其使用的存储引擎
同一库中不同表可以使用不同的存储引擎
同一个库中表建议要使用同一种存储引擎类型
2、表查看
查看表:
1 | SHOW TABLES [ FROM db_name] |
查看表创建命令:
1 | SHOW CREATE TABLE tbl_name |
查看表结构:
1 2 | DESC [db_name.]tb_name SHOW COLUMNS FROM [db_name.]tb_name |
查看表状态:
1 | SHOW TABLE STATUS LIKE 'tbl_name' |
查看支持的engine类型
1 | SHOW ENGINES; |
3、修改和删除表
修改表
1 2 3 4 5 6 7 | ALTER TABLE 'tbl_name' #字段: #添加字段: add ADD col1 data_type [ FIRST | AFTER col_name] #删除字段: drop #修改字段: alter (默认值), change(字段名), modify (字段属性) |
查看修改表帮助
1 | Help ALTER TABLE |
删除表
1 | DROP TABLE [IF EXISTS] 'tbl_name' ; |
修改表范例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #修改表名 ALTER TABLE students RENAME s1; #添加字段 ALTER TABLE s1 ADD phone varchar (11) AFTER name ; #修改字段类型 ALTER TABLE s1 MODIFY phone int ; #修改字段名称和类型 ALTER TABLE s1 CHANGE COLUMN phone mobile char (11); #删除字段 ALTER TABLE s1 DROP COLUMN mobile; #修改字符集 ALTER TABLE s1 character set utf8; #修改数据类型和字符集 ALTER TABLE s1 change name name varchar (20) character set utf8; #添加字段 ALTER TABLE students ADD gender ENUM( 'm' , 'f' ); alter table student modify is_del bool default false ; #修改字段名和类型 ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY ; #删除字段 ALTER TABLE students DROP age; #查看表结构 DESC students; #新建表无主键,添加和删除主键 CREATE TABLE t1 SELECT * FROM students; ALTER TABLE t1 add primary key (stuid); ALTER TABLE t1 drop primary key ; #添加外键 ALTER TABLE students add foreign key (TeacherID) references teachers(tid); #删除外键 SHOW CREATE TABLE students #查看外键名 ALTER TABLE students drop foreign key <外键名>; |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步