第六节:数据定义语言DDL
DDL:数据定义语言用到的关键字主要有create、drop、alter、rename、set、show、desc、use
comment: 表示注释
create
- create:作用是用来创建数据库、表、视图、索引、临时表等
- 名称规范:
- 数据库以db开头:db_name
- 表以tb开头:tb_name
创建数据库
- 语法:create database [if not exists]数据库名 [default character set 字符集名称] [default collate 校对规则名称]
- [ ]:表示[]里面的内容是可选的
- if not exists:在创建数据库之前进行判断,如果不存在才会创建,如果存在也不会报错(避免数据库已经存在而重复创建的错误)
- [DEFAULT] CHARACTER SET:指定数据库的默认字符集
- [DEFAULT] COLLATE:指定字符集的默认校对规则
- 实例:数据库为db_test,指定其默认字符集为 utf8,默认校对规则为 utf8_chinese_ci(简体中文,不区分大小写)
- create database if not exists db_test default character set utf8 default collate utf8_chinese_ci
创建表
- 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性约束的过程
- CREATE TABLE 命令语法:其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的
- 创建表的语法:CREATE TABLE [if not exists] tb_name ([表定义选项])[表选项][分区选项];
- [表定义选项]的格式为:(列名 列类型 其他的关键词,...列名 列类型 其他的关键词)
- CREATE TABLE 语句的主要语法及使用说明如下:
- CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限
- tb_name:指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,在特定的数据库中创建表
- 表定义选项:表创建定义,由列名、列的属性、约束或表索引组成。
- 例如:创建了tb_test表
create table IF NOT EXISTS tb_test( id int not null auto_increment comment '用户id', user_name varchar(20) not null comment '用户名', email varchar(50) not null comment '用户邮箱', age tinyint unsigned not null comment '用户年龄', primary key(id) )ENGINE=INNODB DEFAULT CHARSET=utf8;
-
使用select语句创建表:
- CREATE TABLE 表名 AS SELECT语句 ;
- CREATE TABLE 表名 SELECT语句 ;
创建用户
- 语法格式:create user 'user_name'@'host_name' identified by 'password'
- 语法说明如下:
- 'user_name'@'host_name':是一个整体,在user表中唯一标识一个用户。
- user_name:是用户名
- host_name:为主机名,指定了允许用户登录所使用的IP。若没指定主机名,则主机名默认为“%”(比如user=root Host=192.168.1.1。表示说root用户只能通过192.168.1.1的客户端去访问) %是个通配符,表示所有IP都有连接权限
- identified by:用于设置用户的登录密码,如果省略则不设置登录密码
- password:设置的登录密码
- 'user_name'@'host_name':是一个整体,在user表中唯一标识一个用户。
- create user 注意点:
- create user 语句创建一个用户账号后,会在系统自身的MySQL数据库的 user 表中添加一条新记录。
- 如果两个用户具有相同的用户名和不同的主机名,MySQL 会将他们视为不同的用户,并允许为这两个用户分配不同的权限集合
- 实例:
- create user userName@192.168.1.60 identified by '123456';(创建一个用户,用户名是 userName,密码是 123456,主机是 192.168.1.60。)
- create user userName; (不加地址,默认是所有机器,不加identified by 表示不设置登录密码)
drop
删除数据库
- 语法:drop database[ if exists ] 数据库名
- 语法说明如下
- 数据库名:指定要删除的数据库名
- IF EXISTS:用于防止当数据库不存在时发生错误
- 注意:MySQL 安装后,系统会自动创建名为 information_schema 和 mysql 的两个系统数据库,用来存放一些和数据库相关的信息,删除了这两个数据库,MySQL 将不能正常工作
- 例子:drop database if exists db_test;
删除表
- 语法:DROP TABLE [IF EXISTS] 表名1,..., 表名n
- 语法说明如下
- 表名:被删除的表名。drop table 语句可以同时删除多个表
- 参数IF EXISTS用于在删除前判断删除的表是否存在,加上该参数后,在删除表的时候,表不存在也不会报错
- 实例:drop table newTeacher;
删除用户
- 语法格式:drop user 用户名1,...,用户名n
- drop user 注意点:
- drop user 语句可用于删除一个或多个用户
- 在 drop user 语句的使用中,若没有明确地给出账户的主机名,则该主机名默认为“%”。
- 删除用户不会影响他们之前所创建的表、索引等其他数据库对象,因为 MySQL 并不会记录是谁创建了这些对象
- 实例:drop user 'jack'@'localhost';
alter、rename和set
修改数据库
- 语法:ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET 字符集名 | [ DEFAULT ] COLLATE 校对规则名}
- 语法说明如下
- 数据库名称可以省略(省略即是默认的数据库)
- alter database修改的的是数据库的全局属性,这些特性存储在数据库目录的 db.opt 文件中。
- character set 和 collate用于修改字符集和校对规则
-
例子:alter database db_test default character set gb2312 default collate gb2312_chinese_ci;
修改表结构
- 语句用来修改表的 结构(增加或者减少列,创建获者取消索引,更改列名、表名、索引,修改字段的排列位置,更改表的存储引擎、约束等等)
- 基本语法:alter table tb_name 修改选项
- 添加字段
- 语法:ALTER TABLE 表名 ADD [column] 新字段名 数据类型 [约束条件] [FIRST|AFTER 已存在的字段名]
- 语法说明如下
- 新字段名:需要添加的字段的名称;
- FIRST:为可选参数,其作用是将新添加的字段设置为表的第一个字段;
- AFTER 为可选参数,其作用是将新添加的字段添加到指定的已存在的字段名的后面。
- column:为可选参数,使用与否均不影响结果
- “FIRST 或 AFTER 已存在的字段名”用于指定新增字段在表中的位置,如果没有这两个参数,则默认将新字段设置为数据表的最后列。
- 实例
- alter table teacher2 add age1 int first;
- alter table teacher2 add age2 int after age1;
- 修改字段数据类型:
- 语法:alter table tb_name modify [column] 列名称 类型
- 语法说明如下
- column:为可选参数,使用与否均不影响结果
- 表名:指要修改数据类型的字段所在表的名称
- 字段名:指需要修改的字段
- 数据类型:指修改后字段的新数据类型
- 实例:alter table teacher modify column name varchar(11);
- 删除字段
- 语法:alter table tb_name drop 字段名;
- 语法说明如下:
- 字段名:指需要从表中删除的字段的名称。
- 实例:alter table teacher drop name;
- 修改字段名称
- 语法:alter table tb_name change 旧字段 新字段 新类型
- 语法说明如下:
- 旧字段名:指修改前的字段名
- 新字段名:指修改后的字段名
- 新数据类型:指修改后的数据类型,如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样,但数据类型不能为空。
- 实例:alter table teacher change id pid varchar(25);
- 注意: CHANGE 也可以只修改数据类型,实现和 MODIFY 同样的效果,将 SQL 语句中的“新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”。
- 修改表名
- 语法:alter table 旧表名 rename [to] 新表名
- 语法说明如下:
- TO 为可选参数,使用与否均不影响结果。
- 实例:alter table teacher1 rename newTeacher;
修改用户账号和密码
修改用户账号
- 语法格式:rename user username@hostname to newname@newhost
- 语法说明如下:
- username@hostname:系统中存在的需要修改的用户账号
- newname@newhost:新的用户账号
- newname和hostname:随便改哪个都算修改用户账号
- rename user注意点:
- rename user 语句用于对原有的账户进行重命名
- 若系统中旧账户不存在或者新账户已存在,则该语句执行时会出现错误
- 实例: rename user james@'localhost' TO jack@'localhost';
修改密码
- 语法格式:set password [for username@hostname] = password('新明文口令')
- 语法说明如下:
- for username@hostname:指定欲修改密码的账户;不加表示修改当前账户的密码
- password('新明文口令'):表示使用函数 password() 设置新口令,即新口令必须传递到函数 PASSWORD() 中进行加密
- 实例:set password for 'Weiking'@'localhost'= password('123456');
show
- 查看数据库:show databases [like %数据库名称%];
- LIKE 是可选项,用于匹配指定的数据库名称:show databases like 'Weiking%';
- 查看所有数据库 :show databases;
- 查看创建表的SQL语句:show create table 表名 \G;
- 不仅可以查看创建表时的详细语句,而且可以查看存储引擎和字符编码。
- 如果不加“\G”参数,显示的结果可能非常混乱,加上“\G”参数之后,可使显示的结果更加直观
- 查看某个数据库下有哪些表:show tables(相当于相对路径)或show tables from database_name;
- 查看某个数据库下的某张表有哪些列:show columns from tb_name from db_name;
- 查看某个用户的授权:show grants for user_name;
- 查看一张表的索引:show index from table_name;
- 查看当前所有的线程的状态: show status;
- 查看所有系统变量:show variables;
- 查看当前数据库支持的引擎:show engines;
desc
- DESCRIBE/DESC 语句可以查看表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等
- 语法:describe ta_name(或简写成:DESC ta_name)
- 实例:desc commodity;
- 表结构说明如下
+------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | c_id | int(11) | NO | PRI | NULL | | | c_name | varchar(50) | NO | | NULL | | | c_madein | varchar(50) | NO | | NULL | | | c_type | int(11) | YES | MUL | NULL | | | c_inprice | int(11) | NO | | NULL | | | c_outprice | int(11) | YES | | NULL | | | c_num | int(11) | YES | | 100 | | +------------+-------------+------+-----+---------+-------+ 1.Null:表示该列是否可以存储 NULL 值。 2.Key:表示该列是否已编制索引。PRI 表示该列是表主键的一部分,UNI 表示该列是 UNIQUE 索引的一部分,MUL 表示在列中某个给定值允许出现多次。 3.Default:表示该列是否有默认值,如果有,值是多少。 4.Extra:表示可以获取的与给定列有关的附加信息,如 AUTO_INCREMENT 等。
use
- 切换数据库:use tb_name;
- 语法说明如下
- 该语句可以通知 MySQL 把tb_name作为当前数据库。
- 实例:use teacher;


浙公网安备 33010602011771号