MySQL使用手册

2 篇文章 0 订阅

MySQL语法总结

MySQL结构:

数据库中存放数据都是依托与一张张的数据表存在的,我们通过数据库可以高效的利用数据;而我们对数据的操作就是对数据库中的表的操作。

SQL数据类型:

字符型:<varchar> VS <char>
文本型:<text>
数值型:<int> VS <smallint> VS <tinyint>
浮点型:<float> VS <decinal>
逻辑型:<bit>
日期型:<datetime> VS <smalldatetime>

MySQL基本操作(格式):

登陆

mysql -u root -p
默认没有密码,直接回车,也可以自行修改密码。
操作数据库中的表单时,一定要先USE <数据库名>来进入该数据库

创建

  • 创建数据库:CREATE databases <数据库名>;
  • 创建表单:CREATE table <表名>;

查询

单表查询

SELECT <字段名一,字段名二,...>
FROM <表名>
WHERE <查询条件>;
  • 查询所有数据库:SHOW DATABASE;
  • 选中某个数据库进行操作:USE <数据库名>
  • 查询某数据库中所有的表:SHOW TABLES;
  • 查询表中某字段的数据:SELECT <字段名一,字段名二....> FROM <表名>;
  • 查询某记录:SELECT <字段一,字段二...> FROM <表名> WHERE <查询条件>;
    • (多个)查询条件:<字段名> =值 && <字段名> =值
  • 查询表中的所有记录:SELECT * FROM <表名>;
  • 查询表结构字段名(不包含外键):DESC <表名>;
  • 查询表创建时(修改后)的SQL语句:SHOW CREATE TABLE <表名>;可以用来查看外键信息

连接查询:可以使用表的别名(eg:table1 A)
- 内连接-等值连接:指使用等号”=”比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录-SELECT <表名A.字段名(*)>,<表名B.字段名(*)> FROM <表名A> INNER JOIN <表名B> ON <表名A.字段名> = <表名B.字段名>;
- 内连接-非等值连接:SELECT <表名A.字段名(*)>,<表名B.字段名(*)> FROM <表名A> INNER JOIN <表名B> ON <表名A.字段名> >(或者<) <表名B.字段名>;
- 外连接-左外连接:指将左表的所有记录与右表符合条件的记录匹配,返回的结果除内连接的结果,同时如果有左表不符合条件的记录,就在右表相应列中填NULL-SELECT <表名A.字段名(*)>,<表名B.字段名(*)> FROM <表名A> LEFT JOIN <表名B> ON <表名A.字段名> = <表名B.字段名>
- 外连接-右外连接:SELECT <表名A.字段名(*)>,<表名B.字段名(*)> FROM <表名A> RIGHT JOIN <表名B> ON <表名A.字段名> = <表名B.字段名>
- 自然连接:MySQL中的自然连接是自动将两个表中相同名称的列进行记录匹配SELECT <表名A.字段名>,<表名B.字段名> FROM <表名A> NATURAL JOIN <表名B>;
- 自连接:用别的表实现自身表的连接-SELECT <表名B.字段名(*)> FROM <表名A.字段名(*)>,<表名B.字段名(*)> WHERE <表名A.字段名> = <表名B.字段名> AND <查询条件>;

嵌套查询:将一个查询块嵌套在另一个查询块的WHERE子句或者HAVING短语的条件中的查询
- 含IN的子查询:可以多层嵌套-SELECT <字段一,字段二...> FROM <表名> WHERE <字段名> IN (SELECT <字段一,字段二...> FROM <表名> WHERE <查询条件>);
- 含ANY的子查询:查询的条件符合另一个查询结果的任一个即可-SELECT <字段一,字段二...> FROM <表名> WHERE <字段名> <ANY(或者是>ANY、=ANY) (SELECT <字段一,字段二...> FROM <表名> WHERE <查询条件>)
- 含EXISTS的子查询:EXISTS代表存在量词∃。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑值true或者false-SELECT <字段一,字段二...> FROM <表名> WHERE <字段名> EXISTS (SELECT <字段一,字段二...> FROM <表名> WHERE <查询条件>)

集合查询:SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作。集合操作主要包括并操作UNION、交操作INTERSECT、差操作EXCEPT,在MySQL替换过来就是ORANDEXISTS/IN
- 集合并查询:实质上是进行两次查询操作然后将结果取并集-SELECT <字段一,字段二...> FROM <表名> WHERE <查询条件> UNION SELECT <字段一,字段二...> FROM <表名> WHERE <查询条件>,可以使用语句取代-SELECT <字段一,字段二...> FROM <表名> WHERE <查询条件> OR <查询条件>
- 集合交查询:MySQL不支持直接的交集查询,使用替代语句-SELECT <字段一,字段二...> FROM <表名> WHERE <查询条件> AND <查询条件>
- 集合差查询:MySQL不支持直接的差集查询-SELECT <字段一,字段二...> FROM <表名> WHERE <查询条件> AND <查询条件>,具体使用时逻辑符号会变。或者使用IN或者EXISTS

排序

  • 按照某字段升序排列:SELECT * FROM <表名> ORDER BY <字段名> LIMIT <待排列的记录数>;
  • 降序排列:SELECT * FROM <表名> ORDER BY <字段名> DESC LIMIT <待排列的记录数>;

插入

  • 插入记录:INSERT INTO <表名> VALUES('...','','',....);
  • 插入某一字段:ALTER TABLE <表名> ADD <字段名> <字段类型> ;

删除

  • 删除数据库:DROP DATABASE <数据库名>;
  • 删除未被外键关联的表:DROP TABLE IF EXISTS <表名>;
  • 删除已经外键关联的表:先删除子表再删除父表
  • 删除表中的某一条记录:DELETE FROM <表名> WHERE <字段=值>;
  • 删除表中的某一字段:ALTER TABLE <表名> DROP <字段名>;
  • 删除外键约束:ALTER TABLE <表名> DROP FOREIGN KEY <外键名>

修改

  • 修改表名:ALTER TABLE <旧表名> RENAME TO <新表名>;
  • 修改表中的字段名:ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <数据类型>;
  • 修改表中字段的数据类型:ALTER TABLE <表名> MODIFY <字段名> <新数据类型>;
  • 修改表中字段的顺序:ALTER TABLE <表名> MODIFY <字段名> <数据类型> FIRST/AFTER <字段名>;
  • 修改表中某一记录某一字段的值:UPDATE <表名> SET <字段名>=<新值> WHERE <查询条件>;
  • 在表都创建之后添加外键:ALTER TABLE <需要添加外键的表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<需添加外键的表的字段名>) REFERENCES <被作为外键的表名> (<被作为外键的字段名>);

索引

index索引可以有重复的值,而unique和primary key索引列中的值时唯一的
- ALTER创建索引(可同时添加多个表的索引列)
- ALTER TABLE <表名> ADD INDEX <索引名(可省缺)>(索引字段名);
- ALTER TABLE <表名> ADD UNIQUE(<索引字段名>);
- ALTER TABLE <表名> ADD PRIMARY KEY(<索引字段名>);
- CREATE增加索引
- CREATE INDEX <索引名> ON <表名> (<索引字段名>);
- CREATE INDEX <索引名> ON <表名> (<索引字段名>);
- 查询索引:SHOW INDEX FROM <表名>;或者SHOW KEYS FROM <表名>;
- 删除索引:DROP INDEX <索引名> ON <表名>;或者ALTER TABLE <表名> DROP INDEX <索引名>或者ALTER TABLE <表名> DROP PRIMARY KEY;

设置约束关系

主键,又称主码,主键约束就是作为主键的字段在记录中是唯一存在的,不可重复,并且也不许为空。就像我们每个人都有自己唯一的身份ID一样,唯一标识。利用这个特性,我们可以在数据库中快速的查询定位到一条记录。
- 设置主键:创建表的时候,在定义字段以及数据类型的后面直接加上PRIMARY KEY (默认值);或者在定义完所有的字段以及数据类型后,加上PRIMARY KEY (<字段名一,....>)

外键,表中的一个或多个字段,可以不是本表的主键,但必须是另一个表的主键。外键用来在两个表中建立连接关系,对于有关联关系的两个表而言,相关联字段中主键所在的表为父表,外键所在的表为子表。
- 设置外键:在表中所有字段都定义后(包括外键名),加上CONSTRAINT <外键约束名> FOREIGN KEY(外键名) REFERENCES <关联的外表名(外表的字段名)>;

注意的是,这里的外键约束名与外键名是不同的意思
同一个数据库中,外键约束名和外键名一定不可以重复!!! /(ㄒoㄒ)/~~

视图

视图包含行和列,其中的字段来自一个或多个数据库中的真实的表中的字段,一起组合成一个类似真实的表。可以像基本表一样,进行增删改查的操作。记录进行改动后,视图与基本表都会更新
- 创建视图:

CREATE VIEW <视图名>(视图字段名一,字段名二,...(可选)) AS <子查询语句>
SELECT <字段名一,字段名二,...>
FROM <表名>
WHERE <查询条件>;
  • 删除视图:DROP VIEW <视图名>;
  • 查询视图:SELECT * FROM <视图名>;或者SLECT <字段名> FROM <视图名>;
  • 修改视图:可以向上述修改字段/记录的方式一样来修改视图,并且修改结果各个实际的表也会生效,也可以按下面的方法修改↓↓↓↓↓
CREATE OR REPLACE VIEW <视图名>(视图字段名一,字段名二,...(可选)) AS <子查询语句>
SELECT <字段名一,字段名二,...>
FROM <表名>
WHERE <查询条件>;

某些情况下可以缺省视图的字段名,MySQL会自动补全。但是当SELECT后面的字段有来自函数查询的结果时,不可以缺省。

添加注释/备注

  • 给表添加描述:ALTER TABLE <表名> COMMENT='这里是表的注释'
  • 给列添加描述:ALTER TABLE <表名> MODIFY '<字段名>' DATETIME DEFAULT NULL COMMENT '字段描述'

心得

谈一谈外键约束关系
在两个相关联的表中,一个表的主键是另一个表的非主键字段,这个字段中的值可能有很多。就拿学生选课来说,某一个课程可能有很多学生选,学生的主键是学号,那么该课程的表中,学号这一外键就会有很多值,同时,也把课程的数据表和学生的数据表关联了起来。
呐,在这个例子中,课程的表就是子表,学生的数据表就是父表。倘若,父表的值改变了,那么一定需要修改子表的值,而子表想去修改外键的值是没有权限的;但是,子表可以删除带有外键值的记录。这之中就有一种很明显的约束关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值