一、MySQL语言的分类
SQL是结构化查询语言的英文单词缩写,已经是关系型数据库的标准。主要用于存取、查询、更新、管理数据库系统,SQL语言通常分为三种类型:
数据库定义语言(DDL):库、表、索引的创建语句、删除与修改语句,如CREATE、DROP、ALTER
数据库操纵语言(DML):增删查改语句,如INSERT、UPDATE、DELETE、SELECT(也有把SELECT定义为DQL的)
数据库控制语言(DCL):控制用户权限的语句,如GRANT、REVOKE
二、MySQL数据库DDL语句介绍
1、database的创建、查看与删除
MySQL的数据都是存放在每个库中的各个表里,建库时最好指定好字符集,库名是无法修改的。
mysql > create database NEWDATABASE1 default charset utf8mb4; #创建名为NEWDATABASE1,数据库名区分大小写
mysql > create database NEWDATABASE2 if not exists; #如果指定的数据库不存在才进行创建
mysql > show databases; #显示所有数据库
mysql > use NEWDATABASE1 #进入指定数据库
mysql > drop database NEWDATABASE2; #删除指定数据库
mysql > drop database NEWDATABASE2 if exists #如果指定的库存在才进行删除
2、table的创建查看与删除
建表时需要注意以下规范:
· 建表语句最好带上库名
· 表名最好都是小写,避免跨平台不兼容
· 建表语句必须设置存储引擎和字符集
· 每个表必须要有主键
· 每个列尽量都设置非空NOT NULL,因为在做比较运算时,会对NULL值做特殊处理,会影响性能
· 每个列都加上注释
· 表的每列也称为字段,各个字段的属性可以是不同的,要为每个字段选择合适的数据类型
建表语句示例:
# 建议对每列字段名都加上反引号,防止关键词问题;并且指定默认字符集和校对规则
create table school.student1 (
`id` int not null auto_increment primary key COMMENT 'ID', #字段名为id,类型为int,不能为空,自增,唯一主键
`name` varchar(10) NOT NULL COMMENT '姓名', #字段名为name,varchar类型,长度为10,数据超过10个字符就无法插入
`sex` enum('m','f') NOT NULL COMMENT '性别',
`age` tinyint UNSIGNED NOT NULL DEFAULT 18 COMMENT '年龄';) ENGINE = innodb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
create table student2 like student1 #复制表1的结构到新表2
create table student3 select * from student1 #复制表1的表结构和数据到新表3
show tables; 查看当前库中的所有表格
show create table table_name \G #查看建表所用语句
3、使用alter语句修改表本身的属性,需要注意的是alter操作会锁表,执行alter语句期间所有修改类的命令无法正常进行
#增加列
alter table test_table add test_col varchar(10)
alter table t1 add column location varchar(20) not null after name; #在name列后面加新的一列,名称为location
#删除列
alter table test_table drop test_col
#重命名列,将test_col修改为new_test_col
alter table test_table change test_col new_test_col varchar(10)
#修改列的属性
alter table test_table modify test_col varchar(20)
#更改表存储引擎
alter table t8 engine=InnoDB
4、使用truncate语句截断表,也就是清空表,但是不会记录删除的语句。通常还配合optimize回收表空间,否则只是让这些数据页可复用,却不会释放磁盘空间,原因可以参见《MySQL基础教程(10)InnoDB存储引擎、Redo log与Undo log》的相关介绍
mysql > truncate table student;
mysql > optimize table student;
5、查看表的详细结构,包括每行数据是否可以为空、是否有约束条件、默认值等信息
DESC 表名;