DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
查看所有数据库名称:SHOW DATABASES;
切换数据库:USE mydb1,切换到mydb1数据库;
查看当前使用的数据库的名称: select database();
#显示所有的数据库
SHOW DATABASES;
#使用那个数据库
#use 数据库名
USE test;
#查询当前使用的数据库
SELECT DATABASE();
#查询某个数据库下有哪些表
SHOW TABLES;
#查看表结构
#desc 表名;
DESC tb_user;
1. 写完一条sql语句,使用分号结束, 可以分行写 2. 关键字 不区分大小写, 推荐写大写 3. 表名,数据库名,列名 不区分大小写 推荐写小写
数据名不能重复
DEFAULT CHARACTER:设置默认的字符集编码: 默认值utf8
utf8: utf8 编码最⼤字符长度为 3 字节,如果遇到 4 字节的宽字符就会插⼊异常了,比如Emoji表情,就无法使用utf8存储,推荐使用utf8mb4
utf8mb4: mb4即most bytes 4,专门用来兼容四个字节即以上的unicode, 在Mysql在5.53版本之后
COLLATE: 排序规则字符集 默认值 utf8_general_ci 带ci: 值不区分大小写 不带ci: 值区分大小写 utf8mb4_bin:将字符串每个字符⽤⼆进制数据编译存储,区分大小写,可以存二进制的内容。推荐使用
#创建一个名字为mytest1的数据库
CREATE DATABASE mytest1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
#为了防止因为数据名名字存在报错,
# if not EXISTS
CREATE DATABASE IF NOT EXISTS mytest1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
#删除数据库 慎用
# drop database 数据库名;
DROP DATABASE mytest1;
#修改
#修改数据库编码:
#alter database 数据名 内容
ALTER DATABASE mytest1 CHARACTER SET utf8mb4;
(1)创表基本概念、要求
创表 表结构: 列名(字段名) 数据类型 没有字符类型,只有字符串类型(文本) 数值类型: 浮点型: float,double,decimal 必须: double(d,m) m: 小数位 d:有效数字长度 double(5,2) 2位小数 整数位 = 5-2 = 3 -999.99 ~ 999.99 unsigned表示无符号: 数值类型后面 添加 unsigned , 不加默认是signed(有符号) 文本类型 字符串类型 文本类型 char与varchar 要求: 1. 一定设置长度 char(10) 固定长 或者varchar(10) 可变长度 长度最多存放多少个字符 2. char与varchar区别: 如果值长度小于指定长度, char: 值后面补空格 'ab ' varchar: 不会补空格 'ab' char使用场景: 列的值字符个数固定 二进制文件: BLOB 在实际开发中, 文件不会存在数据库, 文件存在文件服务器中, 数据库存储的文件的地址 常用的时间类型: 日期类型:年月日: date 时间类型: time datetime: 年月日时分秒 mysql 日期格式:"yyyy-MM-dd hh:mm:ss"
(2)创表语句
create table 表名( 列名1 数据类型 [其他说明], 列名2 数据类型 [其他说明], 列名3 数据类型 [其他说明], ... 列名n 数据类型 [其他说明] ) 注意: 最后一行不要写逗号 推荐的取名方式: 表名: tb_表名 列名: 多个单词: 单词1_单词2 USE mytest1; #创建一个用户表: id int 编号, name varchar(50) 用户名 password 密码 sex性别 # birthday 出生日期 date address 地址 varchar(200) #在mysql中,给列,表名 添加一个包裹
CREATE TABLE `tb_user`(
`id` INT UNSIGNED,
`name` VARCHAR(50),
`password` VARCHAR(50),
`sex` VARCHAR(2),
`birthday` DATE,
`address` VARCHAR(200)
)
## 引擎: 5.5以后默认使用引擎: innodb 5.5之前: 默认 myisam ## innodb 支持事务 myisam 不支持 ## innodb 支持行锁,表锁 myisam 支持到表锁 ## innodb 支持外键约束 myisam不支持
还可以添加注释
## 字符集: 默认 与数据库的字符集一样 ## 排序规则字符集: 默认 与数据库的字符集一样 ## comment 注释
CREATE TABLE emp (
eid CHAR(6) COMMENT '编号',
ename VARCHAR (50) COMMENT '姓名',
age INT COMMENT '年龄',
gender VARCHAR (6) COMMENT '性别',
birthday DATE COMMENT '出生日期',
hiredate DATE COMMENT '入职日期',
salary DECIMAL (7, 2) COMMENT '薪水',
RESUME VARCHAR (1000) COMMENT '简介'
) ENGINE=INNODB CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT '员工表' ;
(3)表操作
## 创建表,如果表名存在,创建失败
## 表操作:
## 删除表
## drop table 表名;
DROP TABLE emp;
##查看创建表的sql
##show create table 表名
SHOW CREATE TABLE `tb_user`;
DESC tb_user;
#修改表:
##语法: alter table 表名 修改的内容;
#1. 修改之添加列:给tb_user表添加tell列:
ALTER TABLE tb_user ADD tell CHAR(11);
#2. 修改之修改列类型:修改tb_user表的tell列类型为VARCHAR(11):
ALTER TABLE tb_user MODIFY tell VARCHAR(11);
#3. 修改之修改列名:修改tb_user表的tell列名为iphone:
ALTER TABLE tb_user CHANGE tell iphone VARCHAR(11);
#4. 修改之删除列:删除tb_user表的iphone列:
ALTER TABLE tb_user DROP iphone;
#5. 修改之修改表名称:修改tb_user表名称为tb_userinfo:
ALTER TABLE tb_user RENAME TO tb_userinfo;
备份表结构, 创建表以另外一张表的表结构
CREATE TABLE tb_user AS SELECT * FROM tb_userinfo WHERE 1=2;
CREATE TABLE tb_user1 AS SELECT id,`name`,`password` FROM tb_userinfo WHERE 1=2;