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 #显示表结构
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
INNODB和MYISAM
常规使用操作:
- Innodb安全性高,十五的处理,多表多用户操作
- myisam 存储占用空间少,速度较快
- 表锁,行锁。一个在表级别的时候锁住,一个在语句级别上锁
- INNODB现在也支持全文索引了。
所有数据库文件都存在 data 文件中
mysql引擎在物理文件上的区别:
- InnoDB在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件
- MYISAM对应文件
- *.frm 表结构定义的文件
- *.MYD 数据文件
- *.MYI 索引文件
设置数据库表的字符集编码
charset=utf8
mysql默认编码Latin1,创建时就应该设置默认编码,在my.ini中配置默认的编码,但是还是要在创建表的时候加上,不然在别人电脑不能执行,会乱码。