1.创建数据库
1.1 创建一个名称为 hsp_db01 的数据库。
CREATE DATABASE hsp_db01;
1.2 删除数据库指令
DROP DATABASE hsp_db01
1.3 创建一个使用 utf8 字符集的 hsp_db02 数据库
CREATE DATABASE hsp_db02 CHARACTER SET utf8
1.4 创建一个使用 utf8 字符集,并带校对规则的 hsp_db03 数据库
校对规则
utf8_bin
区分大小 默认
utf8_general_ci
不区分大小写
CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin
1.5 下面是一条查询的 sql
--select 查询 * (" * "表示所有字段)FROM 表名
--WHERE 字段名
SELECT *
FROM t1
WHERE NAME = 'tom'
--代表从表t1中查询NAME为tom的人的数据
2.查看、删除数据库
2.1 查看当前数据库服务器中的所有数据库
SHOW DATABASES
2.2 查看前面创建的 hsp_db01 数据库的定义信息
SHOW CREATE DATABASE `hsp_db01`
2.3 删除前面创建的 hsp_db01 数据库
DROP DATABASE hsp_db01
3.创建表
3.1 创建一个表 emp
-- 字段属性
-- Id 整形
-- name 字符型
-- sex 字符型
-- brithday 日期型(date)
-- entry_date 日期型 (date)
-- job 字符型
-- Salary 小数型
-- resume 文本型
CREATE TABLE `emp` (
id INT,
`name` VARCHAR(32),
sex CHAR(1),
brithday DATE,
entry_date DATETIME,
job VARCHAR(32),
salary DOUBLE,
`resume` TEXT)
CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;
3.2 添加数据
INSERT INTO `emp` VALUES(100, '小妖怪', '男',
'2000-11-11', '2010-11-10 11:11:11',
'巡山的', 3000, '大王叫我来巡山'); --添加一条数据
SELECT * FROM `emp`;--查询emp表信息
3.3 修改表的操作练习
-- 员工表 emp 的上增加一个 image 列,varchar 类型(要求在 resume 后面)。
ALTER TABLE emp
ADD image VARCHAR(32) NOT NULL DEFAULT ''
AFTER RESUME
DESC employee -- 显示表结构,可以查看表的所有列
-- 修改 job 列,使其长度为 60。
ALTER TABLE emp
MODIFY job VARCHAR(60) NOT NULL DEFAULT ''
-- 删除 sex 列。
ALTER TABLE emp
DROP sex
-- 表名改为 employee。
RENAME TABLE emp TO employee
-- 修改表的字符集为 utf8
ALTER TABLE employee CHARACTER SET utf8
-- 列名 name 修改为 user_name
ALTER TABLE employee
CHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT ''
DESC employee
4.数据库 C[create]R[read]U[update]D[delete]语句
4.1 Insert 语句(添加数据)
-- 创建一张商品表 goods (id int , goods_name varchar(10), price double );
-- 添加 2 条记录
CREATE TABLE `goods` (
id INT ,
goods_name VARCHAR(10), -- 长度 10
price DOUBLE NOT NULL DEFAULT 100 );
-- 添加数据
INSERT INTO `goods` (id, goods_name, price)
VALUES(10, '华为手机', 2000);
INSERT INTO `goods` (id, goods_name, price)
VALUES(20, '苹果手机', 3000);
SELECT * FROM goods;
CREATE TABLE `goods2` (
id INT ,
goods_name VARCHAR(10), -- 长度 10
price DOUBLE NOT NULL DEFAULT 100 );
4.2 Insert 语句细节说明
-- 1.插入的数据应与字段的数据类型相同。
-- 比如 把 'abc' 添加到 int 类型会错误
INSERT INTO `goods` (id, goods_name, price) VALUES('韩顺平', '小米手机', 2000);
-- 2. 数据的长度应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中
INSERT INTO `goods` (id, goods_name, price)
VALUES(40, 'vovo 手机 vovo 手机 vovo 手机 vovo 手机 vovo 手机', 3000);
-- 3. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。
INSERT INTO `goods` (id, goods_name, price) -- 不对
VALUES('vovo 手机',40, 2000);
-- 4. 字符和日期型数据应包含在单引号中。
INSERT INTO `goods` (id, goods_name, price)
VALUES(40, vovo 手机, 3000); -- 错误的 vovo 手机 应该 'vovo 手机'
-- 5. 列可以插入空值[前提是该字段允许为空]
insert into table value(null)
INSERT INTO `goods` (id, goods_name, price)
VALUES(40, 'vovo 手机', NULL);
-- 6. insert into tab_name (列名..) values (),(),() 形式添加多条记录
INSERT INTO `goods` (id, goods_name, price)
VALUES(50, '三星手机', 2300),(60, '海尔手机', 1800);
-- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
INSERT INTO `goods` VALUES(70, 'IBM 手机', 5000);
-- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
-- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null
-- 如果我们希望指定某个列的默认值,可以在创建表时指定
INSERT INTO `goods` (id, goods_name)
VALUES(80, '格力手机');
SELECT * FROM goods;
INSERT INTO `goods2` (id, goods_name)
VALUES(10, '顺平手机');
SELECT * FROM goods2;
4.3 update 语句(更新数据)
-- 要求: 在上面创建的 employee 表中修改表中的纪录
-- 1. 将所有员工薪水修改为 5000 元。[如果没有带 where 条件,会修改所有的记录,因此要小心]
UPDATE employee SET salary = 5000 --这里没有where指定修改哪一列,所以就是修改所有员工工资
-- 2. 将姓名为 小妖怪 的员工薪水修改为 3000 元。
UPDATE employee SET salary = 3000 WHERE user_name = '小妖怪'
-- 3. 将 老妖怪 的薪水在原有基础上增加 1000 元
INSERT INTO employee VALUES(200, '老妖怪', '1990-11-11',
'2000-11-11 10:10:10', '捶背的', 5000, '给大王捶背', 'd:\\a.jpg');
UPDATE employee SET
salary = salary + 1000
WHERE user_name = '老妖怪'
-- 可以同时修改多个列的值
UPDATE employee
SET salary = salary + 1000 , job = '出主意的'
WHERE user_name = '老妖怪'
SELECT * FROM employee;
4.4 update 语句使用细节
1.UPDATE语法可以用新值更新原有表行中的各列。
2.SET子句指示要修改哪些列和要给予哪些值。
3.WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行(记录)
4.如果需要修改多个字段,可以通过set字段1=值1,字段2=值2.….
UPDATE 表名 SET 列名 = 修改后列的值 WHERE 哪一行,比如id为1的或者姓名叫张三的
4.5 delete语句(删除数据)
-- 删除表中名称为’老妖怪’的记录。
DELETE FROM employee WHERE user_name = '老妖怪';
-- 删除表中所有记录
DELETE FROM employee;
-- Delete 语句不能删除某一列的值(可使用 update 设为 null 或者 '')
UPDATE employee SET job = '' WHERE user_name = '老妖怪';
--同样的,如果不用where指定会将所有字段job设为空
-- 要删除这个表
DROP TABLE employee;
4.6 delete语句使用细节
1.如果不使用where子句,将删除表中所有数据。
2.Delete语句不能删除某一列的值(可使用update设为null或者")
3.使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table 语句。
drop table 表名;
4.7 select 语句
--创建一个student表用于测试
CREATE TABLE student(
id INT NOT NULL DEFAULT 1,
NAME VARCHAR(20) NOT NULL DEFAULT '',
chinese FLOAT NOT NULL DEFAULT 0.0,
english FLOAT NOT NULL DEFAULT 0.0,
math FLOAT NOT NULL DEFAULT 0.0 );
--添加几条记录
INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'韩顺平',89,78,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'张飞',67,98,56);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'宋江',87,78,77);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'关羽',88,98,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'赵云',82,84,67);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'欧阳锋',55,85,45);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(8,'韩信',45,65,99);
-- 查询表中所有学生的信息。
SELECT * FROM student;
-- 查询表中所有学生的姓名和对应的英语成绩。
SELECT `name`,english FROM student;
-- 过滤表中重复数据 DISTINCT
SELECT DISTINCT english FROM student;
-- 要查询的记录,每个字段都相同,才会去重
--比如有两个张飞并且英语成绩都为98,就会删除一条
SELECT DISTINCT `name`, english FROM student;
4.8 select 语句使用细节
4.8.1 使用表达式对查询的列进行运算
-- 统计每个学生的总分
SELECT `name`, (chinese+english+math) FROM student;
-- 在所有学生总分加 10 分的情况
SELECT `name`, (chinese + english + math + 10) FROM student;
4.8.2 在 select 语句中可使用 as 语句
-- 使用别名表示学生分数。
SELECT `name` AS '名字', (chinese + english + math + 10) AS total_score FROM student;
4.8.3 在 where 子句中经常使用的运算符
4.8.4 使用 where 子句,进行过滤查询
-- 查询姓名为赵云的学生成绩
SELECT * FROM student WHERE `name` = '赵云'
-- 查询英语成绩大于 90 分的同学
SELECT * FROM student WHERE english > 90
-- 查询总分大于 200 分的所有同学
SELECT * FROM student WHERE (chinese + english + math) > 200
-- 查询 math 大于 60 并且(and) id 大于 4 的学生成绩
SELECT * FROM student WHERE math >60 AND id > 4
-- 查询英语成绩大于语文成绩的同学
SELECT * FROM student WHERE english > chinese
-- 查询总分大于 200 分 并且 数学成绩小于语文成绩的 姓赵的学生.
-- 赵% 表示 名字以赵开头
SELECT * FROM student
WHERE (chinese + english + math) > 200
AND math < chinese
AND `name` LIKE '赵%'
-- 查询英语分数在 80-90 之间的同学。
SELECT * FROM student WHERE english >= 80 AND english <= 90;
SELECT * FROM student WHERE english BETWEEN 80 AND 90; -- between .. and .. 是 闭区间
-- 查询数学分数为 89,90,91 的同学。
SELECT * FROM student WHERE math = 89 OR math = 90 OR math = 91;
SELECT * FROM student WHERE math IN (89, 90, 91);
-- 查询所有姓李的学生成绩。
SELECT * FROM student WHERE `name` LIKE '李%'
4.8.5 使用 order by 子句排序查询结果
-- 对数学成绩排序后输出【升序】。
SELECT * FROM student ORDER BY math;
-- 对总分按从高到低的顺序输出 [降序]
-- 使用别名排序
SELECT `name` , (chinese + english + math) AS total_score
FROM student
ORDER BY total_score DESC;
-- 对姓韩的学生成绩[总分]排序输出(升序) where + order by
SELECT `name`, (chinese + english + math) AS total_score
FROM student
WHERE `name` LIKE '韩%'
ORDER BY total_score;
那么MySQL的一些基本的操作就都在这里了,当然还有一些稍微高级一些操作,太多了,写完最起码又是洋洋洒洒几万字,不写了不写了,有空在写吧
——摘自B站韩顺平学Java