Mysql常用语句
操作数据库表
创建数据库
CREATE DATABASE `dbName`;
切换数据库
USE `dbName`;
查看所有的数据库
SHOW DATABASES;
删除数据库(删除数据库、表、字段的时候用drop )
DROP DATABASE `dbName`;
操作数据库表
创建表
CREATE TABLE `TabName`(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(10)
);
查看表结构
desc 表名;
添加表数据
语法一: into 表名(列名1,列名2…) values(值1,值2…),(值1,值2…)…;
INSERT INTO `tab1` (cid,cname) VALUES
(1,'name1'),
(2,'name2'),
(3,'name3');
语法二:insert into 表名(列2,列3) values(值2,值3…)…; 当主键有自动增长时,可以省略主键不写
INSERT INTO tab1(cname) VALUES ('name4');
语法三:insert into 表名 values(null,值2,值3…),(null,值2,值3…); 当主键有自动增长时,可以省略列名不写,但是要写出所有的值,主键写null
INSERT INTO tab1 VALUES (NULL,'name5');
查看表数据
查看所有
SELECT * FROM tab1;
查看指定列
SELECT `cname` from tab1;
删除表元素(删除表元素用delete或者truncate)
语法一: delete from 表名 [where 条件] 删除表中元素,但是不重置主键的自动增长
DELETE FROM tab1 WHERE cname = 'name5';
语法二: truncate table 表名; 删除表中元素并重置主键的自动增长
TRUNCATE TABLE `tabName`;
操作表字段
添加表数据
语法: alter table 表名 add 字段名 数据类型;
ALTER TABLE `tabName` ADD `field` VARCHAR(20);
修改表字段
ALTER TABLE `tabName` CHANGE `oldField` `newField` INT;
删除表字段
ALTER TABLE `tabName`DROP `fieldName`;
操作字段约束 (总结规律:当涉及到修改表结构的时候,需要用到alter关键字)
删除主键约束
语法: TABLE 表名 DROP PRIMARY KEY;
ALTER TABLE `tab2 ` DROP PRIMARY KEY;
#####添加主键约束
语法: ALTER TABLE 表名 ADD PRIMARY KEY(列名);
ALTER TABLE `tab2 ` ADD PRIMARY KEY(`cid`);
修改字段约束
语法: ALTER TABLE 表名 ADD UNIQUE(字段);
ALTER TABLE `product` ADD UNIQUE(pname);
查询表数据
注意:
当你想要查询表中的部分字段,并且将该表起了个别名,那么在调用表中字段的时候,
格式必须写为:别名.字段名
千万不要写成:原表名.字段名 --> mysql数据库会报错
正确的写法
SELECT a.pid,a.pname,a.price FROM product AS a;
错误的写法
SELECT product.pid,product.pname,product.price FROM product AS a;
过滤表数据 --> distinct
select distinct 要过滤的字段 from 表名;
给表、字段起别名 --> As(可省略)
select * from `tabName` (as) `newTabName`;
在查询语句中可以执行运算操作
例: 查询商品表中所有商品,并将价格提高1000元
select pname, price + 1000 (as) price from `product`;
模糊查询 --> like + 条件(%或者 _) _ : 一个下划线表示一个字符; %: 表示多个字符
例: 查询商品表中名称带有’男装’的商品信息
select * from `product where pname like '%男装%';
select * from `product` where pname like '__男装'; //例如: 劲霸安装,一个下划线_ 表示一个字符
排序查询 --> order by
select * from product order by price desc; //按照降序顺序排序
select * from product order by price (asc) //按照升序顺序排序 asc可以省略
聚合函数查询 --> 对某列的数据按照特定的函数进行查询,返回一个单一的值, 忽略值为null的数据
#在test表中插入三条数据,其中最后一条的price值为null
INSERT INTO test VALUES(NULL,20),
(NULL,300),
(NULL,NULL);
#使用聚合函数count进行查询
SELECT COUNT(price),COUNT(id) FROM test;
查询结果如下:
常用的聚合函数有以下几种:
count: 查询非空值的字段数量
sum: 求和
max,min: 最大值、最小值
avg: 平均值
分组查询 --> group by
SELECT * FROM `tabName` GROUP BY `field`; //select * from 表名 group by 字段名;
where和having的区别
where用于分组前的条件过滤
having 用于分组后的条件过滤
分页查询 --> limit
#首先查询所有数据
SELECT * FROM gjp_ledger;
结果如下:
分页查询-查询前5条数据
SELECT * FROM gjp_ledger LIMIT 5;
结果如下:
#查询第二页数据,每页5条数据
SELECT * FROM gjp_ledger LIMIT 5,5;
结果如下:
#查询第三页的数据,每页5条数据
SELECT * FROM gjp_ledger LIMIT 10,5;
结果如下:
规律总结
查询前n条数据(包含第n条)
select * from 表名 limit n;
查询第m页,每页n条数据(不包含第(m-1)*n 条数据)
select * from 表名 m,n;
多表联查
一对多关系:
添加外键约束
语法:
alter table 从表名 add (constraint 给外键起个别名)foreign key(从表中要做外键的字段) references 主表(主键);
ALTER TABLE product ADD CONSTRAINT products_fk FOREIGN KEY (category_id) REFERENCES products(psid);
删除外键约束
#语法:
alter table 从表名 drop foreign key 外键别名;
ALTER TABLE product DROP FOREIGN KEY products_fk; // 删除的外键名要使用别名,写外键的字段名删除不掉
多对多关系:
创建一个中间表,使用两个表的主键作为中间表的外键
CREATE TABLE middle(
products_id INT,
orders_id INT,
FOREIGN KEY(products_id) REFERENCES products(pid),
FOREIGN KEY(orders_id) REFERENCES orders(oid)
);
多表查询—内连接、外链接查询
- select * from 表1,表2; 会产生笛卡尔积
笛卡尔积:表1数据数量 * 表2数据数量- 内连接查询 //只能查看到有关联的数据
select * from 表1 inner join 表2 on 表1.主键 = 表2.外键; //显式内连接
select * from 表1,表2 where 表1.主键 = 表2.外键; //隐式内连接- 外连接查询 -->左外连接、右外连接
select * from 左表 left outer join 右表 on …; /左做连接,查询结果会列出所有匹配的数据,以及没有匹配项的会用null来显示
#外连接 --> 左外连接 以左表作为匹配项展示数据
SELECT * FROM products ps LEFT OUTER JOIN product p ON ps.psid=p.category_id;
#外连接 --> 右外连接 以右表作为匹配项展示数据
SELECT * FROM products ps RIGHT OUTER JOIN product p ON p.category_id = ps.psid;