一.关键字
数据库 : database 数据表 : table 创建 : create
修改 : alter 添加 : add 修改 : modify(类型/约束)/change(列名/类型/约束)
删除 : drop 增加 : insert into 更新 : update…set 删除 : delete from
约束 : constraint 唯一 : unique 非空 : not null 主键 : primary key
自增 : auto_increment 查询 : select…from 独特 : distinct(去重)
排序 : order by(字段名,按什么排序)(asc升,desc降) /分组 : group by(分组字段名,按什么分组)
外键 : foreign key references(参考)
二.SQL
1.Sql语句分类
数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
2.SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾
- 可使用空格和缩进来增强语句的可读性
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
例如:SELECT * FROM user。
4.MySQL中的我们常使用的数据类型如下
三.DDL之数据库操作
创建数据库
格式:
* create database 数据库名;
* create database 数据库名 character set 字符集;
例如:
#创建数据库 数据库中数据的编码采用的是安装数据库时指定的默认编码 utf8
CREATE DATABASE webdb_1;
#创建数据库 并指定数据库中数据的编码
CREATE DATABASE webdb_2 CHARACTER SET utf8;
查看数据库
查看数据库MySQL服务器中的所有的数据库:
show databases;
查看某个数据库的定义的信息:
show create database 数据库名;
例如:
show create database webdb_1;
查看正在使用的数据库:select database();
SELECT DATABASE();
删除数据库
drop database 数据库名称;
例如:
drop database webdb_2;
使用数据库
查看正在使用的数据库:
select database();
其他的数据库操作命令
切换数据库:
use 数据库名;
例如:use webdb_1;
DDL之表操作:table
创建表
创建数据库中的表,使用关键字 create(创建) table(表)
[]:数据库中是可选的意思,可以有,可以没有
格式:
create table 表名(
字段名 数据类型[长度] [约束],
字段名 数据类型[长度] [约束],
...
字段名 数据类型[长度] [约束](最后一个不能有逗号)
);
主键约束:primary key
--字段不能为null,不能重复
举例:创建商品分类表category :
CREATE TABLE category(
-- 商品id
cid INT PRIMARY KEY,
-- 商品名称
cname VARCHAR(100)
);
查看表
-- 查看当前数据库中所有的表
SHOW TABLES;
-- 查看表结构 DESC 表名
DESC category;
删除表
格式:drop table 表名;
例如:drop table category;
修改表结构格式
增加: alter table 表名 add 列名 类型(长度) [约束];
作用:修改表添加列.
例如:
#1,为分类表添加一个新的字段为 分类描述 varchar(20)
ALTER TABLE category ADD `desc` VARCHAR(20);
小修改: alter table 表名 modify 列名 类型(长度) 约束;
作用:修改表修改列的类型长度及约束.
注意: 如果有数据,必须注意数据类型varchar-->int 容易有错误数据
例如:
#2, 为分类表的描述字段进行修改,类型varchar(50) 添加约束 not null
ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL;
大修改: alter table 表名 change 旧列名 新列名 类型(长度) 约束;
作用:修改表修改列名.
例如:
#3, 为分类表的分类名称字段进行更换 更换为 description varchar(30)
ALTER TABLE category CHANGE `desc`description VARCHAR(30);
删除列: alter table 表名 drop 列名;
作用:修改表删除列.
注意: 如果列中有数据,数据就会一起删除了,需谨慎
例如:
#4, 删除分类表中description这列
ALTER TABLE category DROP description;
改表名: rename table 表名 to 新表名;
作用:修改表名
例如:
#5, 为分类表category 改名成 category2
RENAME TABLE category TO category2;
改编码: alter table 表名 character set 字符集(了解);
作用:修改表的字符集
注意:不建议执行,有可能会产生乱码
例如:
#6, 为分类表 category 的编码表进行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
(DML)数据操作语言
插入表记录:insert
INSERT INTO (insert into)
往数据库表中插入数据
使用关键字 insert [into]
格式:
包含主键:insert into 表名(字段1,字段2,...) values(值1,值2,...);
主键自增,省略主键:insert into 表名(不包含主键) values(不包含主键);
注意事项:
1.字段和值一定要一一对应(个数,数据类型)
2.除了数值类型(int,double),其它的数据类型都需要使用引号包裹起来
可以使用' ',也可以使用"",建议使用' '
-- 包含主键:insert into 表名(字段1,字段2,...) values(值1,值2,...);
INSERT INTO category (cid,cname) VALUES(1,"服装");
INSERT INTO category (cid,cname) VALUES(2,"彩电");
-- 创建category表 主键自增AUTO_INCREMENT(主键自己添加,自己增长)
CREATE TABLE category(
-- 商品id
cid INT PRIMARY KEY AUTO_INCREMENT,
-- 商品名称
cname VARCHAR(100)
);
-- 主键自增,省略主键:insert into 表名(不包含主键) values(不包含主键);
INSERT INTO category (cname) VALUES("彩电");
批量插入数据
格式:
包含主键:insert into 表名(字段1,字段2,...) values(值1,值2,...),(值1,值2,...),(值1,值2,...)...
主键自增,省略主键:insert into 表名(不包含主键) values(不包含主键),(值1,值2,...),(值1,值2,...)...;
INSERT INTO category (cid,cname) VALUES(3,'空调'),(4,'洗衣机');
INSERT INTO category (cname) VALUES('微波炉'),('电磁炉');
省略字段名格式:必须给出全部字段的值(包含主键)
格式:
insert into 表名 values(全部字段的值);
insert into 表名 values(全部字段的值),(全部字段的值),(全部字段的值)..;
INSERT INTO category VALUES(7,'冰箱');
INSERT INTO category VALUES(8,'笔记本电脑'),(9,'台式机');
-- 记不住主键,可以使用null,sql会自动计算主键
INSERT INTO category VALUES(NULL,'小米6');
更新表记录:update
更新表数据,使用关键字 update(更新,修改) set(设置)
格式:
语法:
--更新所有记录的指定字段, 不带条件过滤,一次修改列中所有的数据
update 表名 set 字段名=值,字段名=值,...;
--更新符合条件记录的指定字段
update 表名 set 字段名=值,字段名=值,... where 条件过滤;
- 注意:
- 列名的类型与修改的值要一致.
- 修改值得时候不能超过最大长度.
- 除了数值类型外,其它的字段类型的值必须使用引号引起
-- 不带条件过滤(慎用)
UPDATE category SET cname='全部修改';
-- 带条件过滤,使用关键字where !! (-- 只修改cid为4的cname 关键字不是-while-这么坑)
UPDATE category SET cname='黑白电视机' WHERE cid=4;
删除记录(数据表):delete
删除表数据 使用关键字 delete(删除) from(来自)
格式:
delete from 表名 [where 条件过滤];
delete from 表名 删除表中的所有数据,但是不会删除主键自增
truncate table 表名;删除表中的所有数据,会删除主键自增,让主键自增重置从1开始
-- delete from 表名 [where 条件过滤];
DELETE FROM category WHERE cid=4;
-- delete from 表名
DELETE FROM category;
-- 插入数据,会出现断号,没有之前的序号
INSERT INTO category (cname) VALUES('手机');
DELETE FROM category WHERE cid=12;
INSERT INTO category (cid,cname) VALUES(12,'手动插入指定的主键列');
-- truncate table 表名;
TRUNCATE TABLE category;
约束
主键约束
主键约束 使用关键字 primary key
作用:
约束主键列不能为null
不能重复
每个表都必须有一个主键,且只能有一个主键
主键不能使用业务数据
-- 添加主键的第一种方式,在列名之后直接添加
CREATE TABLE persons(
Id_P INT PRIMARY KEY,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);
INSERT INTO persons(Id_P,LastName) VALUES(1,'张');
INSERT INTO persons(Id_P,LastName) VALUES(NULL,'张');-- 非空
INSERT INTO persons(Id_P,LastName) VALUES(1,'张');-- 重复
-- 添加主键的第二种方式,使用constraint区域
-- 格式:[constraint 名称] primary key (字段列表)
CREATE TABLE persons(
Id_P INT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
CONSTRAINT pk_id_p PRIMARY KEY(Id_P)
);
-- constraint 如果不给出主键的名字,可以省略关键字constraint
CREATE TABLE persons(
Id_P INT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
PRIMARY KEY(Id_P)
);
添加主键的第三种方式,创建表之后,通过修改表结构,添加主键
alter table 表名 add [constraint 名称] primary key (字段列表);
CREATE TABLE persons(
Id_P INT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);
ALTER TABLE persons ADD PRIMARY KEY(Id_P);
-- 删除主键
ALTER TABLE persons(表名) DROP PRIMARY KEY;
-- 联合主键:使用2个以上的字段为主键
CREATE TABLE persons(
Id_P INT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
PRIMARY KEY(LastName,FirstName)
);
自动增长列
AUTO_INCREMENT (auto_increment)
我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整形,自动增长列必须为键(一般是主键)。
P_Id int PRIMARY KEY AUTO_INCREMENT,
非空约束
NOT NULL (not null)
/*
非空约束 使用关键字 not null
作用:强制约束某一列不能为null(不接受null值)
*/
-- 创建非空约束的第一种格式,创建表时,在字段后直接给出
CREATE TABLE persons(
Id_P INT PRIMARY KEY AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255) NOT NULL
);
-- 添加数据
INSERT INTO persons(lastname,city) VALUES('张','雄县');
INSERT INTO persons(lastname,city) VALUES('李','null');
INSERT INTO persons(lastname,city) VALUES('王','');
INSERT INTO persons(lastname,city) VALUES('赵',NULL); -- Column 'City' cannot be null
-- String s = "雄县";
s="" ; s="null"; s=null; void java四大皆空
-- 创建非空约束方式二 修改表结构
-- alter table 表名 modify 列名 类型[长度] [约束];
CREATE TABLE persons(
Id_P INT PRIMARY KEY AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);
(修改modify 时写约束)
ALTER TABLE persons MODIFY city VARCHAR(255)NOT NULL;
-- 删除非空约束(修改modify 时不写约束)
ALTER TABLE persons MODIFY city VARCHAR(255);
唯一约束(UNIQUE (unique))
唯一约束 使用关键字UNIQUE
作用: 添加了唯一约束的字段,不能重复
-- 创建唯一约束的第一种格式,创建表时,在字段后直接给出
CREATE TABLE persons(
Id_P INT PRIMARY KEY AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255) UNIQUE
);
INSERT INTO persons (lastname,city) VALUES('张','毛里求斯');
-- Duplicate entry '毛里求斯' for key 'City'
INSERT INTO persons (lastname,city) VALUES('王','毛里求斯');
-- 创建唯一约束的第二种格式,创建表时使用 [constraint 名称] unique(字段列表)
CREATE TABLE persons(
Id_P INT PRIMARY KEY AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
CONSTRAINT UNIQUE(City)
);
-- 创建唯一约束的第三种格式,创建表之后,修改表数据
-- alter table 表名 modify 列名 类型[长度] [约束];
CREATE TABLE persons(
Id_P INT PRIMARY KEY AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);
(修改modify 时写约束)
ALTER TABLE persons MODIFY city VARCHAR(255) UNIQUE;
-- alter table 表名 add [constraint 名称] unique (字段列表);
CREATE TABLE persons(
Id_P INT PRIMARY KEY AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);
ALTER TABLE persons ADD UNIQUE(City);
/*
删除唯一约束 ALTER TABLE Persons DROP INDEX 名称
定义约束的时候,如果没有创建名称,则名称为字符串
*/
ALTER TABLE persons DROP INDEX city;
默认约束(DEFAULT (default))
默认约束:给字段添加一个默认值,如果字段没有插入值,则使用默认值
使用关键字 default 值
-- 创建默认约束方式一,创建表,列数据类型后面 default '默认值'
CREATE TABLE persons(
Id_P INT PRIMARY KEY AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)DEFAULT '中国' //指定默认数值,修改时才会改变,否则一直是
);
INSERT INTO persons (lastname) VALUES('张');
INSERT INTO persons (lastname,city) VALUES('张','加拿大');
-- 创建默认约束方式二 修改表结构
CREATE TABLE Persons(
Id_P INT PRIMARY KEY AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
)
-- alter table 表名 modify 列名 类型[长度] [约束];
ALTER TABLE Persons MODIFY City VARCHAR(255) DEFAULT '我的家乡';
-- 删除默认约束 (修改modify 时不写约束)
ALTER TABLE Persons MODIFY City VARCHAR(255);