DAY06
-- DDL 数据定义语言
-- 创建一个默认值字符集的数据
CREATE DATABASE db1;
-- 创建指定字符集的数据库
CREATE DATABASE db2 CHARSET utf8;
CREATE DATABASE db3 CHARACTER SET utf8;
-- 切换数据库
USE db1;
-- 查看数据库的创建信息
SHOW CREATE DATABASE db1;
-- 查看所有的数据库
SHOW DATABASES;
CREATE DATABASE db3 CHARSET gbk;
SHOW CREATE DATABASE db3;
-- 修改数据库的字符集
ALTER DATABASE db3 CHARSET utf8;
-- 删除数据库
DROP DATABASE db3;
-- 创建一张表
CREATE TABLE student(
id INT,
name VARCHAR(20),
sex VARCHAR(20),
age INT,
hobby VARCHAR(20)
);
-- 修改表名
ALTER TABLE `user` RENAME student;
-- 查看表结构
DESC student;
-- 添加一列 默认在最后进行添加
ALTER TABLE student ADD grade DOUBLE;
-- 添加一列 first 在最前面添加
ALTER TABLE student ADD aa INT FIRST;
-- 在指定字段后面进行添加 after
ALTER TABLE student ADD bb INT AFTER age;
-- 修改一列 change 改变
ALTER TABLE student CHANGE bb cc INT;
-- 删除一列
ALTER TABLE student DROP aa;
-- 删除表
DROP TABLE student;
-- DML 数据操纵语言
USE db2;
CREATE TABLE student(
id INT,
`name` VARCHAR(20),
sex VARCHAR(20),
age INT,
hobby VARCHAR(20)
);
-- 向表中添加数据
INSERT INTO student(`name`) VALUES('张三');
INSERT INTO student(id,sex,age,hobby) VALUES(1,'男',17,'吃饭');
INSERT INTO student(id,`name`,sex,age,hobby) VALUES(2,'李四','男',19,'睡觉');
-- 给表中所有字段添加数据 使用简写的格式
-- 添加值的个数和顺序要跟列名保持一致
INSERT INTO student VALUES(3,'马保国','男',69,'闪电五连鞭');
-- 一次添加多条数据
INSERT INTO student(id,`name`,sex,age,hobby)
VALUES(4,'王五','男',20,'打豆豆'),
(5,'小红','女',16,'逛街'),
(6,'洋老板','男',18,'冲'),
(7,'豆豆','女',23,'被打');
-- 修改 update
-- 修改张三爱好为炒股
UPDATE student SET hobby = '炒股'WHERE `name` = '张三';
-- 修改张三的sex=男 age=17
UPDATE student SET sex = '男',age = 17 WHERE `name` = '张三';
-- 修改id为1000的姓名为王小二
-- 条件不满足不会更新
UPDATE student SET `name` = '王小二' WHERE id = 1000;
-- 没有修改条件,修改表中所有数据
UPDATE student SET sex = '男';
-- 删除 delete
-- 带条件的删除
-- 删除姓名为张三的数据
DELETE FROM student WHERE `name` = '张三';
-- 删除年龄为17的数据
DELETE FROM student WHERE age = 17;
-- 不带条件的删除 就是清空表中所有的数据
DELETE FROM student;
-- 销毁表
DROP TABLE student;
-- 清除表中数据
TRUNCATE TABLE student;
-- MySQL数据类型
USE db2;
CREATE TABLE t1(
tid INT,
money DOUBLE,
tname VARCHAR(10), -- 10代表最大位数
d1 DATE, -- 年月日
d2 TIME, -- 时分秒
d3 DATETIME, -- 年月日时分秒
d4 TIMESTAMP -- 时间戳
);
-- 添加完整的
INSERT INTO t1 VALUES
(1,5.38,'李四','2021-6-28','19:22:22','2021-6-28 19:22:22','2021-6-28 19:22:22');
-- 测试d1和d2
INSERT INTO t1(d1,d2)VALUES ('2021-6-28 19:22:22','2021-6-28 19:22:22');
-- 测试d3和d4 d3默认值是null d4默认值是当前系统时间
INSERT INTO t1(d3,d4) VALUES(
'8888-12-12 12:12:12','8888-12-12 12:12:12');
-- sql约束
/*
添加数据的时候给上限制条件
主键约束 primary key auto_increment
非空约束 not null
唯一约束 unique
默认值约束 default
*/
/*
主键约束。理论上每一张表都应该有一个主键,将一个字段设置为主键之后,该字段不能为空并且不能重复
主键一般都是附加项,以*id命令 user_id uid,主键的作用就是确定每一条数据的唯一性
设置主键之后,维护起来比较麻烦,可以将主键交给mysql进行维护,设置主键自增auto_increment
自增的特点
1、只有int类型才能设置主键自增
2、初始值是1
3、每次在最大值自增1
4、已经出现过的主键不会再出现
*/
USE db2;
CREATE TABLE t2(
tid INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(20)
);
-- 添加数据
INSERT INTO t2 VALUES(1,'张三');
INSERT INTO t2 VALUES(1,'李四'); -- 报错 主键唯一
INSERT INTO t2 VALUES(NULL,'王五'); -- 自动填充主键
INSERT INTO t2(tname) VALUES('赵六');
INSERT INTO t2 VALUES(7,'田七');
INSERT INTO t2 VALUES(NULL,'王小二'); -- id为8
DELETE FROM t2 WHERE tid = 8;
INSERT INTO t2 VALUES(NULL,'张翠花'); -- tid为9
-- 测试其他约束
/*
UNIQUE 唯一约束 约束能力没有主键那么强 还是可以为空的,一般用来约束用户名、手机号、邮箱
not null 非空约束
default 默认值约束 如果该字段没有添加值,使用默认值进行填充,如果添加了值,添加的值会覆盖默认值
*/
CREATE TABLE `user`(
uid INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(20) UNIQUE,
sex VARCHAR(20) NOT NULL,
hobby VARCHAR(20) DEFAULT '唱跳rap打篮球'
);
INSERT INTO `user` VALUES(NULL,'张三','男','跳舞');
INSERT INTO `user` VALUES(NULL,'张三','女','跳舞1');-- 报错 张三存在
INSERT INTO `user` VALUES(NULL,'李四',NULL,'唱歌'); -- 报错 sex不能为null
INSERT INTO `user` VALUES(NULL,'王五','男',NULL);
INSERT INTO `user` VALUES(NULL,'王五1','男',DEFAULT);
-- DQL 数据查询语言
USE db2;
-- select 查询
SELECT * FROM student;
-- 查询单列
SELECT `name` FROM student;
-- 查询多列
SELECT `name`,age FROM student;
-- 列设置别名 as可以省略
SELECT `name` AS 姓名,age 年龄 FROM student;
-- 条件查询 where 查询姓名为张三的信息
SELECT * FROM student WHERE `name` = '张三';
-- 查询性别为男的信息
SELECT * FROM student WHERE sex = '男';
-- 查询性别为男而且姓名为洋老板的信息
SELECT * FROM student WHERE sex = '男' AND `name` = '洋老板';
-- 查询性别为男或者姓名为豆豆的信息
SELECT * FROM student WHERE sex = '男' OR `name` = '豆豆';
-- 查询年龄在17-21岁之间的信息
SELECT * FROM student WHERE age >= 17 AND age <= 21;
-- 范围查询 between... and ...
SELECT * FROM student WHERE age BETWEEN 17 AND 21;
-- 性别不为男的信息
SELECT * FROM student WHERE sex <> '男';
SELECT * FROM student WHERE sex != '男';