SQL的用法

SQL语句

1.SELECT,选择列,AS 别名(适用于字段,表)

SELECT * FROM Teacher  #选择Teacher表所有的列
SELECT name,age FROM Teacher  #只选择出了整个表的Name,age列,查询指定字段
SELECT name AS 学号,age AS 年龄 FROM Teacher # 起一个别名方便查看结果

##特殊用法
SELECT VERSION()
SELECT 100*3-1 AS 计算结果 #用于计算
SELECT `studentGrade` + 1 AS '分数加1' FROM `result` #所有分数加1

1.有时候搜索的结果不是那么见名知意,所以用别名

2.DISTINCT,去重

SELECT DISTINCT name FROM Teacher;#查询Teacher表中所有的不重复的姓名,

3.WHERE子句,判断条件,模糊查询(本质还是运算符)

SELECT  age FROM Teacher WHERE age <30;#找到所有年龄少于三十岁的老师
SELECT  age FROM Teacher WHERE age BETWEEN 20 AND 30 ;#找到所有年龄少于三十岁大于20的老师
SELECT  name FROM Teacher WHERE name = 'lihuanhuan';#找到所有年龄少于三十岁的老师
#模糊查询
IS NULL  /  IS NOT NULL / BETWEEN   /  LIKE / IN
LIKE #SQL匹配,如果a匹配b,则结果为真
IN # a in (a1,a2,a3....) 如果a在里面则为真

注意数字和字母的区别。

模糊查询 LIKE,IN

#名字为两个字符,姓刘的人
SELECT `name`,`age` FROM `student` WHERE `name` LIKE '刘_'
#姓刘的人
SELECT `name`,`age` FROM `student` WHERE `name` LIKE '刘%'
#中间包含刘,名字数量不限制的
SELECT `name`,`age` FROM `student` WHERE `name` LIKE '%欢%'

#在一组里面找符合in里面的,找地址在合肥,六安的人。
SELECT `name` FROM `student` WHERE `Address` IN ('合肥','六安')

4.AND 和 OR,与和或。

#找年龄小于30或者名字为Tom
SELECT  name,age FROM Teacher WHERE age <30 OR name = 'Tom';
#找到所有年龄少于30岁并且大于20的老师
SELECT  age FROM Teacher WHERE age BETWEEN 20 AND 30 ;
#这是多个条件的组合条件
SELECT * FROM Teacher WHERE (FirstName='Tom' OR FirstName='Jerry')
AND LastName='Carter'

5.ORDER BY,排序,DESC 逆序,ASC顺序

#查找姓名并且按照首字母排序
SELECT  name FROM Teacher ORDER BY name;
#查找年龄并且按照大小排序
SELECT  age FROM Teacher ORDER BY age;
#查找姓名并且按照首字母逆序排序,年龄顺序排序
#同时各顺序,以第一个为排序原则,第二列存在相同选项时才顺序排列
SELECT  name,age FROM Teacher ORDER BY name DESC,age ASC;

6.INSERT INTO 插入

#按照顺序插入表中元素
INSERT INTO Teacher VALUES ('Gates',24)
INSERT INTO Teacher VALUES ('Gates',24),('Tom',13)
##字段可以显示写出来,也可以省略,但是必须要一一对应
INSERT INTO Teacher (`name`,`age`) VALUES ('Gates',24)
#也可以只插入想要的值,前提是允许非空
INSERT INTO Teacher  (`name`) VALUES ('Gates')

1.字段和字段之间用都好隔开

2.字段是可以省略的,但是后面的值必须一一对应。

3.可以同时插入多条数据,只要values 后面的值用逗号隔开

7. SHOW 显示建库,建表语句

show create table student
show create database school 
DESC student #显示表结构

image-20200425092725398

8.ALTER,MODIFY,CHANGE ,DROP,ADD修改和删除

#重命名的方式
ALTER TABLE building RENAME AS buildings
#修改表的字段
ALTER TABLE teacher ADD address varchar(30) 
#建议用可视化工具来做
#修改约束,无法重命名,它可以修改所有的字段类型和约束,change不能
ALTER TABLE teacher MODIFY age VARCHAR(10)
#字段重命名,#modify不用来重命名,只能修改字段类型和约束
ALTER TABLE teacher CHANGE age age1 INT(10)
#删除属性
ALTER TABLE teacher DROP age1
#添加字段
ALTER TABLE teacher ADD age INT(1)

9.删除表

#删除表
DROP TABLE IF EXISTS teacher

注意点:

  • `` 字段名使用这个符号包裹
  • 注释 -- 或者 /**/
  • sql 关键字大小写不敏感,建议大家写小写
  • 不要用中文

10.外键(了解即可)

CONSTRAINT FK_gradeid  FOREIGN KEY(gradeid)  REFERENCES `grade`(`gradeid`)

一般不在数据库中设置外键,这里是物理外键,不建议使用,现在都使用逻辑外键了

10.UPDATE 修改

#修改学生姓名
UPDATE `student` SET `name`='狂神' WHERE id = 1
#不指定条件的情况下,会改动所有的表!千万不能这么干,一定要带条件
UPDATE `student` SET `name`='臭狗屎'
#语法
UPDATE 表名 SET 字段(列) WHERE 条件

修改多个属性,逗号隔开

UPDATE `student` SET `name`='狂神',`email` = '12312@qq.com' WHERE id = 1
#语法
UPDATE 表名 SET 字段(列),字段二,。。。 WHERE 条件

11.BETWEEN......AND..... 在两者之间

相当于闭区间 BETWEEN 2 AND 5 [2,5]

12.DELETE,TRUNCATE

#这样会全部删掉
DELETE FROM `student`
#删除指定元素
DELETE FROM `student` WHERE id = 1

#TRUNCATE会删除一个数据库和所有文件
#删除这个表
TRUNCATE `student`

相同点:都能删除,都不会删除表结构

不同点:TRUNCATE 重新设置 自增列,计数器会归零(清空表和数据库用TRUNCATE)

TRUNCATE不会影响事物

DELETE存储在内存上的,断电之后,自增变量又会回到1,MYISAM则会持久化。

连表查询

函数

1.CONCAT 拼接字符串

SELECT CONCAT('姓名:',NAME) AS 姓名 FROM student

image-20200425215258196

INNODB和MYISAM

常规使用操作:

  1. Innodb安全性高,十五的处理,多表多用户操作
  2. myisam 存储占用空间少,速度较快
  3. 表锁,行锁。一个在表级别的时候锁住,一个在语句级别上锁
  4. INNODB现在也支持全文索引了。

image-20200425091413765

所有数据库文件都存在 data 文件中

mysql引擎在物理文件上的区别:

  1. InnoDB在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件
  2. MYISAM对应文件
  • ​ *.frm 表结构定义的文件
  • ​ *.MYD 数据文件
  • ​ *.MYI 索引文件

设置数据库表的字符集编码

charset=utf8

mysql默认编码Latin1,创建时就应该设置默认编码,在my.ini中配置默认的编码,但是还是要在创建表的时候加上,不然在别人电脑不能执行,会乱码。

posted @ 2020-04-25 22:36  li33的博客  阅读(345)  评论(0编辑  收藏  举报