1. DDL解释
DDL(Data Definition Language)
,数据定义语言,该语言部分包括以下内容:
对数据库的常用操作
对表结构的常用操作
修改表结构

2. 对数据库的常用操作
2.1 对表结构的常用操作-创建表
# 创建表
create table [if not exists]表名(
字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表的一些设置];
创建表是构建一张空表,指定这个表的名字,这个表有几列,每一列叫什么名字,以及每一列存储的数据类型。
数据类型
数据类型是指在创建表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来,使用数 据类型的原则是:
够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间

日期和时间类型
字符串类型
2.2 对表结构的常用操作—其他操作
2.3 对表结构的常用操作-修改表结构格式
修改表添加列
alter table 表名 add 列名 类型(长度) [约束];
修改列名和类型
alter table 表名 change column 旧列名 新列名 类型(长度) 约束;
修改表删除列.
alter table 表名 drop 列名;
修改表名
rename table 表名 to 新表名;
3. DML基本介绍
DML
是指数据操作语言,英文全称是
Data Manipulation Language
,用来对数据库中表的数据记录进行 更新。关键字:
插入
insert
删除
delete
更新
update
3.1 数据插入
insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3...); //向表中插入某些
insert into 表 values (值1,值2,值3...); //向表中插入所有列
3.2 数据修改
update 表名 set 字段名=值,字段名=值...;
update 表名 set 字段名=值,字段名=值... where 条件;
3.3 数据删除
delete from 表名 [where 条件];
truncate table 表名 或者 truncate 表名
Caution
注意:
delete
和
truncate
原理不同,
delete
只删除内容,而
truncate
类似于
drop table
,可以理解
为是将整个表删除,然后再创建该表;
4. 使用演示
4.1 MySQL的使用演示
1
、查看所有的数据库
show databases;
“information_schema”是 MySQL 系统自带的数据库,主要保存 MySQL 数据库服务器的系统信
息,比如数据库的名称、数据表的名称、字段名称、存取权限、数据文件 所在的文件夹和系统使
用的 文件夹,等等
“performance_schema”是 MySQL 系统自带的数据库,可以用来监控 MySQL 的各类性能指标。
“sys”数据库是 MySQL 系统自带的数据库,主要作用是以一种更容易被理解的方式展示 MySQL 数
据 库服务器的各类性能指标,帮助系统管理员和开发人员监控 MySQL 的技术性能。
“mysql”数据库保存了 MySQL 数据库服务器运行时需要的系统信息,比如数据文件夹、当前使用
的 字符集、约束检查信息,等等
为什么
Workbench
里面我们只能看到
“demo”
和
“sys”
这
2
个数据库呢?
这是因为,
Workbench
是图形化的管理工具,主要面向开发人 员,
“demo”
和
“sys”
这
2
个数据库已经够
用 了。如果有特殊需求,比如,需要监控
MySQL
数据库各项性能指标、直接操作
MySQL
数据库系统文
件 等,可以由
DBA
通过
SQL
语句,查看其它的系统数据库。
2
、创建自己的数据库
create database 数据库名;
#创建atguigudb数据库,该名称不能与已经存在的数据库重名。
create database atguigudb;
3
、使用自己的数据库
use 数据库名;
#使用atguigudb数据库
use atguigudb;
说明:如果没有使用
use
语句,后面针对数据库的操作也没有加
“
数据名
”
的限定,那么会报
“ERROR 1046 (3D000): No database selected”(没有选择数据库)
使用完
use
语句之后,如果接下来的
SQL
都是针对一个数据库操作的,那就不用重复
use
了,如果要针对 另 一个数据库操作,那么要重新use
。
4
、查看某个库的所有表格
show tables; #要求前面有use语句
show tables from 数据库名;
5
、创建新的表格
create table 表名称( 字段名 数据类型,
字段名 数据类型
);
说明:如果是最后一个字段,后面就用加逗号,因为逗号的作用是分割每个字段。
create table student(
id int,
name varchar(20) #说名字最长不超过20个字符
);
6
、查看一个表的数据
select * from 数据库表名称;
#查看学生表的数据
select * from student;
7
、添加一条记录
insert into 表名称 values(值列表);
#添加两条记录到student表中
insert into student values(1,'张三');
insert into student values(2,'李四');
报错:
mysql> insert into student values(1,'张三');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name'
at row 1
mysql> insert into student values(2,'李四');
ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'name'
at row 1
mysql> show create table student;
字符集的问题。
8
、查看表的创建信息
show create table 表名称\G
#查看student表的详细创建信息
show create table student\G
#结果如下
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
上面的结果显示
student
的表格的默认字符集是
“latin1”
不支持中文。
9
、查看数据库的创建信息
show create database 数据库名\G
#查看atguigudb数据库的详细创建信息
show create database atguigudb\G
*************************** 1. row ***************************
Database: atguigudb
Create Database: CREATE DATABASE `atguigudb` /*!40100 DEFAULT CHARACTER SET
latin1 */ 1 row in set (0.00 sec)
上面的结果显示
atguigudb
数据库也不支持中文,字符集默认是
latin1
。
10
、删除表格
drop table 表名称;#删除学生表drop table student;
11
、删除数据库
drop database 数据库名;
#删除atguigudb数据库
drop database atguigudb;
4.2 MySQL的编码设置
MySQL5.7
中
问题再现:命令行操作
sql
乱码问题
mysql> INSERT INTO t_stu VALUES(1,'张三','男');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname'
at row 1
问题解决
步骤
1
:查看编码命令
show variables like 'character_%';
show variables like 'collation_%';