主要语句
一、数据库
-- 创建数据库
CREATE DATABASE demo;
-- 删除数据库
DROP DATABASE demo;
-- 查看数据库
SHOW DATABASES;
-- 创建数据表
CREATE TABLE demo.test(
字段名 类型,
字段名 类型);
-- 查看表结构
DESCRIBE demo.test;
-- 查看所有表
SHOW TABLES;
其他
SHOW DATABASES describe demo.test;
user demo; show tables;
二、数据表
创建表 like
CREATE TABLE demo.importheadhist LIKE demo.importhead;
主键
ALTER TABLE demo.testADD COLUMN itemnumber int PRIMARY KEY AUTO_INCREMENT;
* ALTER TABLE,表示修改表;
* ADD COLUMN,表示增加一列;
* PRIMARY KEY,表示这一列是主键;
* AUTO_INCREMENT,自增;
插入
INSERT INTO demo.test (barcode,goodsname,price) VALUES ('0001','本',3);
修改
-- 修改字段类型语句 ALTER TABLE demo.goodsmaster;
MODIFY COLUMN price DOUBLE;
添加字段
ALTER TABLE 表名 ADD COLUMN 字段名 字段类型 FIRST|AFTER 字段名; ALTER TABLE 表名 MODIFY 字段名 字段类型 FIRST|AFTER 字段名;
更新
UPDATE 表名 SET 字段名=值 WHERE 条件
推荐的字段类型
整数:INT。 小数:DECIMAL。 字符串:TEXT。 日期与时间:DATETIME。(包含日期和时间)
TEXT 虽然使用方便,但是效率不如 CHAR(M) 和 VARCHAR(M)。
三、主键的选择
尽量不是选择业务字段作为主键,因为很有可能因为后续业务的发展导致主键重复。可以选择自增的字段
修改主键
删掉原先的主键 ALTER TABLE demo.membermaster DROP PRIMARY KEY; 重新赋予别的字段为主键 ALTER TABLE demo.membermaster ADD id INT PRIMARY KEY AUTO_INCREMENT;
三、外键
CREATE TABLE demo.importdetails( listnumber INT, itemnumber INT, quantity DECIMAL(10,3), importprice DECIMAL(10,2), importvalue DECIMAL(10,2), CONSTRAINT fk_importdetails_importhead FOREIGN KEY (listnumber) REFERENCES importhead (listnumber));
运行这个 SQL 语句,我们就在创建表的同时定义了一个名字叫“fk_importdetails_importhead”的外键约束。同时,我们声明,这个外键约束的字段“listnumber”引用的是表 importhead 里面的字段“listnumber”。
内连接
select a.transactionno, a.itemnumber, a.quantity, a.price, a.transdate, b.membername from demo.trans as a join demo.membermaster as b on (a.cardno = b.cardno)
外连接
(1)左连接,一般简写成 LEFT JOIN,返回左边表中的所有记录,以及右表中符合连接条件的记录。
SELECT a.transactionno, a.itemnumber, a.quantity, a.price, a.transdate, b.membername FROM demo.trans AS a LEFT JOIN demo.membermaster AS b ON (a.cardno = b.cardno);
(2)右连接,一般简写成 RIGHT JOIN,返回右边表中的所有记录,以及左表中符合连接条件的记录。
SELECT a.transactionno, a.itemnumber, a.quantity, a.price, a.transdate, b.membername, a.cardno FROM demo.trans AS a right join demo.membermaster AS b ON (a.cardno = b.cardno);
其实,在 MySQL 中,外键约束不是关联查询的必要条件。很多人往往在设计表的时候,觉得只要连接查询就可以搞定一切了,外键约束太麻烦,没有必要。
但是,虽然你不用外键约束,也可以进行关联查询,但是有了它,MySQL 系统才会保护你的数据,避免出现误删的情况,从而提高系统整体的可靠性。
为什么在 MySQL 里,没有外键约束也可以进行关联查询呢?
原因是外键约束是有成本的,需要消耗系统资源。对于大并发
的 SQL 操作,有可能会不适合。比如大型网站的中央数据库,
可能会因为外键约束的系统开销而变得非常慢。所以,MySQL
允许你不使用系统自带的外键约束,在应用层面完成检查数据
一致性的逻辑。也就是说,即使你不用外键约束,也要想办法
通过应用层面的附加逻辑,来实现外键约束的功能,确保数据
的一致性。
四、where 和 having
如果需要通过连接从关联表中获取需要的数据,WHERE 是先筛选后连接,而 HAVING 是先连接后筛选。
WHERE 可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件;HAVING 必须要与 GROUP BY 配合使用,可以把分组计算的函数和分组字段作为筛选条件。
mysql> SELECT -> a.transdate, -> c.operatorname, -> SUM(b.quantity), -> SUM(b.salesvalue) -> FROM -> demo.transactionhead AS a -> JOIN -> demo.transactiondetails AS b ON (a.transactionid = b.transactionid) -> JOIN -> demo.operator AS c ON (a.operatorid = c.operatorid) -> WHERE a.transdate in ('2020-12-12','2020-12-11') -- 先按日期筛选 -> GROUP BY a.transdate , operatorname -> HAVING SUM(b.salesvalue)>100; -- 后按金额筛选 +---------------------+--------------+-----------------+-------------------+ | transdate | operatorname | SUM(b.quantity) | SUM(b.salesvalue) | +---------------------+--------------+-----------------+-------------------+ | 2020-12-11 00:00:00 | 李强 | 2.000 | 178.00 | +---------------------+--------------+-----------------+-------------------+ 1 row in set (0.00 sec)
包含分组统计函数的条件用 HAVING,普通条件用 WHERE。这样,我们就既利用了 WHERE 条件的高效快速,又发挥了 HAVING 可以使用包含分组统计函数的查询条件的优点。当数据量特别大的时候,运行效率会有很大的差别。
标签:--,demo,数据库,外键,ALTER,MySQL,TABLE,主键 From: https://www.cnblogs.com/carryup/p/16704052.html