首页 > 数据库 >数据库MySQL

数据库MySQL

时间:2022-09-18 01:11:33浏览次数:101  
标签:-- demo 数据库 外键 ALTER MySQL TABLE 主键

主要语句

一、数据库

-- 创建数据库
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

相关文章

  • Sql Server 查询数据库,所有表,列,类型
    1--查询所有表2selectSysobjects.NamefromSysObjects34--查询所有类型5selectSysTypes.NamefromSysTypes67--查询所有列8selectSy......
  • 异常和数据库事务的几个容易出错的地方
    https://blog.csdn.net/csdnsevenn/article/details/84645568?utm_source=tuicool&utm_medium=referral我们在开发企业应用时,由于数据操作在顺序执行的过程中,线上可能有各......
  • mysql根据旧表创建新表_MySQL复制旧表结构创建新表
    1、复制表结构及数据到新表CREATETABLE新表SELECT*FROM旧表这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用deletefromnewtable;来删除。不过这种方法的......
  • mysql怎么清空数据表数据
    MySQL提供了DELETE和TRUNCATE关键字来删除表中的数据。MySQLDELETE关键字在MySQL中,可以使用DELETE语句来删除表的一行或者多行数据。使用DELETE语句从单个......
  • MySQL教程 - 规范
    更新记录转载请注明出处。2022年9月10日发布。2022年9月10日从笔记迁移到博客。规范命名规范表名小写加下划线比如:CREATETABLEpanda_table_name();字......
  • MySQL教程 - 优化数据库
    更新记录转载请注明出处。2022年9月10日发布。2022年9月10日从笔记迁移到博客。优化数据库查看用户使用情况SHOWPROCESSLIST;杀连接进程killuserId;......
  • 数据库原理:数据模型和关系数据库
    目录数据模型数据模型的分类数据模型的组成要素常用的数据模型层次模型网状结构关系模型关系模型概念笛卡尔积码的概念关系的概念关系模式关系操作关系完整性实体完整性参......
  • mysql的binlog,MySQL日志详解
    什么是binlogbinlog介绍-芹溪-博客园(cnblogs.com) mysql的binlog开启方式,查看方式.三种binlog模式介绍.以及使用binlog恢复数据.删除binlog(75条消息)MySQL日......
  • 自定义监控MySQL主从状态
    自定义监控MySQL主从状态zabbix自定义监控Mysql主从状态和延迟目录自定义监控MySQL主从状态zabbix自定义监控Mysql主从状态和延迟监控Mysql主从状态主从同步主库配置从库......
  • zabbix自定义监控mysql主从状态和延迟
    zabbix自定义监控mysql主从状态和延迟目录zabbix自定义监控mysql主从状态和延迟zabbix自定义监控mysql主从状态zabbix自定义监控mysql主从延迟zabbix自定义监控mysql主......