什么是数据库
保存数据的仓库,存储数据。
所有的数据库都是以文件的方式保存在电脑中
SQL语句: Structured Query Language结构化查询语言,用来管理和维护数据库。这是一种所有关系型数据通用的语言。
SQL语句分类
Data Definition Language (DDL数据定义语言,包括:create,drop,alter(修改)语句)
Data Manipulation Language(DML数据操纵语言,包括:增删改 insert,delete,update)
Data Query Language(DQL数据查询语言:包括:查询,select)
Data Control Language(DCL数据控制语言,包括:创建用户,给用户权限,greate(分配权限给用户,revoke(废除数据库中某用户权限)
SQL中的注释
/*
多行注释
*/
-- 注释内容
注释内容mysql特有的单行注释:#
DDL(Data Definition Language)创建数据库
-- DDL数据定义语言:创建数据库,表的。
--CREATE DATABASE 数据库名;
CREATE DATABASE huihui;
--CREATE DATABASE IF NOT EXISTS 数据库名; 如果不存在才创建数据库,存在就不创建
CREATE DATABASE IF NOT EXISTS test01;
--CREATE DATABASE 数据库名 character set 字符集;
CREATE DATABASE xlei CHARACTER SET gbk;
--查询全部数据库
SHOW DATABASES;
--SHOW CREATE DATABASE 数据库名; :查看创建数据库的脚本代码
SHOW CREATE DATABASE xlei;
--ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;修改数据库的字符集
ALTER DATABASE student3 DEFAULT CHARACTER SET utf8;
--drop --表示删除数据库或表
DROP DATABASE 数据库名; 慎用!
DROP DATABASE xlei;
--select -- 查询当前正在用的数据库
SELECT DATABASE();
--切换数据库
USE test01;
DDL(Data Definition Language)创建表
/*
CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2
);
*/
CREATE TABLE student (
id INT,
NAME VARCHAR(20),
birthday DATE
);
--DDL查看表本身的信息结构
SHOW TABLES; # 展示当前数据库下全部的表
--DESC 表名;
DESC student; #查看表的结构信息
--SHOW CREATE TABLE 表名;
SHOW CREATE TABLE student;#展示表的创建脚本
DDL删除表
--CREATE TABLE 表名 LIKE 其他表; 复制一个表(复制表的结构,不包含数据)
CREATE TABLE student01 LIKE student;
-- DROP TABLE 表名;
DROP TABLE student01;
-- DROP TABLE IF EXISTS 表名; 表存在才删除,避免操作失败!
DROP TABLE IF EXISTS student01;
DDL修改表结构
-- ALTER TABLE 表名 ADD 字段名 类型; 添加字段
ALTER TABLE student ADD email VARCHAR(20);
--ALTER TABLE 表名 MODIFY 字段名 新的类型; 修改字段
ALTER TABLE student MODIFY email VARCHAR(30);
--ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型; 修改字段名称
ALTER TABLE student CHANGE email phone VARCHAR(11);
--ALTER TABLE 表名 DROP 字段名; 删除某个字段
ALTER TABLE student DROP phone;
--RENAME TABLE 表名 TO 新表名; 修改表名称
RENAME TABLE student TO teacher;
--ALTER TABLE 表名 character set 字符集; 修改表的字符集
ALTER TABLE teacher CHARACTER SET gbk;
DML插入记录(Data Manipulation Language 数据操控语言)
CREATE TABLE USER (
id INT,
NAME VARCHAR(20),
birthday DATE,
sex CHAR(2),
address VARCHAR(50)
);
INSERT -- 表示往表里插入记录
--INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
INSERT INTO USER (id , NAME , sex , address) VALUES(1,'古扎','女','广州');
-- 不写字段插入数据(完全对应字段值,否则报错!)
INSERT INTO USER VALUES (3, '王五', '2019-01-02', '男', '北京');
-- 一条SQL插入多条数据
--INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...) , (字段值1, 字段值2...)...;
INSERT INTO USER (id , NAME , sex,address) VALUES (2,'老师','女','中国北京'),(4,'林老师','女','中国北京')
,(5,'多老师','女','中国北京');
DML修改表记录
--UPDATE 表名 SET 字段名=新的值;
UPDATE USER SET birthday = '2019-06-05';
--UPDATE 表名 SET 字段名=新的值 WHERE 条件
UPDATE USER SET birthday= '2018-08-08' WHERE NAME = '老师';
-- 根据条件一次修改多个值
UPDATE USER SET address ='日本东京' , birthday = '1997-09-09' WHERE NAME = '多老师';
DML删除表记录
-- DELETE FROM 表名;会干掉表中全部的数据。
DELETE FROM USER;
--DELETE FROM 表名 WHERE 条件;
DELETE FROM USER WHERE id = 4;
--TRUNCATE TABLE 表名;
/*
- delete是将表中的数据一条一条删除
- truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样
*/
TRUNCATE TABLE USER;
DQL查询表记录((Data Query Language 数据查询语言 )
--DQL没有条件的简单查询
--SELECT -- 表示查询
--SELECT 字段名1, 字段名2, ... FROM 表名;
SELECT NAME , address , sex FROM USER; # 查询某些字段信息
--SELECT * FROM 表名;
SELECT * FROM USER; # 查询全部字段和数据信息 , 全表查询!
DQL别名查询 别名可以省略AS
--SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;
SELECT NAME AS 叫啥 , address AS 地址 FROM USER;
--SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
SELECT MV.NAME AS 亲爱的 , MV.address AS 地址 FROM USER AS MV;
清除重复值
-- SELECT DISTINCT 字段名 FROM 表名;
- select DISTINCT address AS 全部地址 from user; 别名可以省略AS
SELECT DISTINCT address 全部地址 FROM USER; 别名可以省略AS
查询结果参与运算
/*898989898989898989898989898989898989898989
CREATE TABLE student3 (
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math int , -- 数学
english int -- 英语
);
ALTER TABLE student3 ADD math INT;
ALTER TABLE student3 ADD english INT;
INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (/////////////////////////////);
*/
-- SELECT 列名1 + 固定值 FROM 表名;
SELECT math + 10 FROM student3;
-- SELECT 列名1 + 列名2 FROM 表名;
SELECT math+english 数学英文总分 FROM student3;
-- 查询所有的数据,统计分数总和
SELECT * , math + english 总成绩 FROM student3;
--给45岁以上的人的数学加10分,然后输出名字和该数学分数
SELECT NAME , math+10 数学分数 FROM student3 WHERE age > 45;
DQL条件查询 比较运算符
/*
>
大于
<
小于
<=
小于等于
>=
大于等于
=
等于
<>
、!=
不等于
*/
--查询math分数大于80分的学生
SELECT * FROM student3 WHERE math > 80;
--查询english分数小于或等于80分的学生
SELECT * FROM student3 WHERE english <= 80;
--查询age等于20岁的学生
SELECT * FROM student3 WHERE age = 20;
--查询age不等于20岁的学生
SELECT * FROM student3 WHERE age <> 20;
SELECT * FROM student3 WHERE age != 20;
DQL查询逻辑运算符
/*
逻辑运算符
and(&&)
多个条件同时满足
or(||)
多个条件其中一个满足
not
不满足
*/
SELECT * FROM student3 WHERE NAME = '马德' AND age = 22;
SELECT * FROM student3 WHERE NAME = '马德' && age = 22;
SELECT * FROM student3 WHERE english > 80 OR math > 80;
SELECT * FROM student3 WHERE english > 80 || math > 80;
SELECT * FROM student3 WHERE id=1 OR id=3 OR id=5;
-- SELECT * FROM 表名 WHERE 字段 in (值1, 值2, 值3);
SELECT * FROM student3 WHERE id IN(1,3,5);
DELETE FROM student3 WHERE id IN(1,3,5);
--查询出id不是7 8的学生
SELECT * FROM student3 WHERE id NOT IN (7 , 8);
--BETWEEN 值1 AND 值2 -- 表示从值1到值2范围,包头又包尾
SELECT * FROM student3 WHERE age >= 45 AND age <= 57;
SELECT * FROM student3 WHERE age BETWEEN 45 AND 57;
模糊查询like
/*
模糊查询格式: SELECT 字段 FROM 表名 WHERE 字段 LIKE '通配符字符串';
%:表示零个一个多个字符(任意多个字符)
_:表示一个字符
*/
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
- 1.查询姓名中有德的人
SELECT * FROM student3 WHERE NAME LIKE '%德%'; - 2.查询姓马的学生
SELECT * FROM student3 WHERE NAME LIKE '马%'; - 3.查询姓马,且姓名有三个字的学生(一个下划线代表一个字);
SELECT * FROM student3 WHERE NAME LIKE '马__';
查询为空的列IS NULL
SELECT * FROM student3 WHERE english IS NULL;
SELECT * FROM student3 WHERE english IS NOT NULL;
-- 查询姓名和英语成绩,如果英语为null,则显示为0分
SELECT NAME, IFNULL(english, 0) 英语 FROM student3;
alter add命令用来增加表的字段。
alter add命令格式:alter table 表名 add字段 类型 其他;
例如,在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0:
mysql> alter table MyClass add passtest int(4) default '0';
- 加索引
mysql> alter table 表名 add index 索引名 (字段名1[,字段名2 …]);
例子: mysql> alter table employee add index emp_name (name);
- 加主关键字的索引
mysql> alter table 表名 add primary key (字段名);
例子: mysql> alter table employee add primary key(id);
- 加唯一限制条件的索引
mysql> alter table 表名 add unique 索引名 (字段名);
例子: mysql> alter table employee add unique emp_name2(cardnumber);
- 删除某个索引
mysql> alter table 表名 drop index 索引名;
例子: mysql>alter table employee drop index emp_name;
增加字段
mysql> ALTER TABLE table_name ADD field_name field_type;修改原字段名称及类型
mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;删除字段
MySQL ALTER TABLE table_name DROP field_name;