#该表类型(存储引擎)InnoDB CREATE TABLE test( id INT(4) PRIMARY KEY AUTO_INCREMENT, coll VARCHAR(20) NOT NULL );
#往表里插入数据 INSERT INTO test(coll) VALUES(‘row1’),(‘row2’),(‘row3’);
#删除表数据(不带where条件的delete) #自增当前值依然从原来基础上进行 DELETE FROM test;
#删除表全部数据(truncate) #自增值恢复到初始值重新开始 TRUNCATE TABLE test;
#创建俩个表,分比为innoDB类型,MyISAM类型
CREATE TABLE tab1( id INT(4) PRIMARY KEY AUTO_INCREMENT, coll VARCHAR(20) NOT NULL
)ENGINE=INNODB;
INSERT INTO tab1(coll) VALUES(‘row1’),(‘row2’),(‘row3’);
CREATE TABLE tab2( id INT(4) PRIMARY KEY AUTO_INCREMENT, coll VARCHAR(20) NOT NULL
)ENGINE=MYISAM;
INSERT INTO tab2(coll) VALUES(‘row1’),(‘row2’),(‘row3’);
#清空表数据 DELETE FROM tab1; DELETE FROM tab2;
#表数据清空之后 id在插入就是从4开始
#重启数据库服务后tab1:id是从1开始 #重启数据库服务后tab2:id是从4开始
#同样适用detale from 清空表数据,重启数据库服务后,对于INNODB的表,自增列从初始值重新开始 #而MYISAM类型的表,自增列依然从上一个自增数据基础开始
#启动数据库服务 net start mysql #停止数据库服务 net stop mysql
#查询表( * 所有列,效率低) SELECT * FROM tab1; SELECT * FROM student;
#(不影响原表原数据 ,只是给顾客方便看 ) SELECT studentno,studentname FROM student;
#为列取别名( AS 是可以省略 ) SELECT studentno AS 学号,studentname AS 姓名 FROM student;
SELECT studentno 学号,studentname 姓名 FROM student;
#使用AS也可以为 表 取别名( AS 是可以省略 ) SELECT studentno AS 学号,studentname AS 姓名 FROM student AS s;
SELECT studentno 学号,studentname 姓名 FROM student s; #连接时用处比较大
#使用AS ,微查询结果取一个新名字 SELECT CONCAT(‘姓名:’,studentname) AS 新姓名 FROM student;
#查询所有学号—加了 去除重复项 (DISTINCT ,默认all all和DISTINCT相反) SELECT DISTINCT studentno FROM student;
#select 查询中可以使用表达式 SELECT @@auto_increment_increment; #自增的步长 SELECT VERSION(); # mysql版本号 SELECT 1003-1 AS 计算结果; #查询 1003-1的 计算结果 是多少
#地址集体加1 SELECT studentno,address+1 AS ‘加完之后的地址’ FROM student;
#满足条件的查询(where) #模糊查询 ( AND 和 && 作用一样 ) SELECT studentno,gradeid FROM student WHERE gradeid BETWEEN 1 AND 3;
#精确查询 SELECT studentno,gradeid FROM student WHERE studentno=1001;
#除了1001之外的 SELECT studentno,gradeid FROM student WHERE studentno!=1001;
#也可以这样写 SELECT studentno,gradeid FROM student WHERE NOT studentno=1001;
#模糊查询 between and\ like \in \ null #查询姓李的同学的学号及姓名 #like 结合使用的% (0到任意个字符) _ (代表一个字符) SELECT studentno,studentname FROM student WHERE studentname LIKE ‘姓%’;
#名字中只有一个字比如 : 马武 #一个 _ 代表一个字 也可以两个 __ SELECT studentno,studentname FROM student WHERE studentname LIKE ‘姓_’;
#按有 姓 字 查询 SELECT studentno,studentname FROM student WHERE studentname LIKE ‘%姓%’;
#模糊查询 SELECT studentno,studentname FROM student; #like & _
#转义符号 % SELECT studentno,studentname FROM student WHERE studentname LIKE ‘%%%’;
#转义符号\ 能不能使用我自己定义的转义符(:)呢? #可以 但是要加上 ESCAPE ‘:’ SELECT studentno,studentname FROM student WHERE studentname LIKE ‘%:%%’ ESCAPE ‘:’;
#模糊查询 in SELECT studentno,studentname FROM student WHERE studentno IN (1001,1002,1000);
#连接查询 : 利用表和表之间的关系,可以查到多个不同表中的数据
#内连接用的是 inner join 查询两个表中的结果中的交集 #内连接用的是 outer join
#左外连接 left join 以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以null填充
#右外连接 right join 以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以null填充 #自连接
#等值连接 非等值连接
#思路 1先要知道用那几个表 2在确定用哪一种连接查询方式 #内连接语法 SELECT student.studentno,studentname FROM student INNER JOIN grade ON grade.gradeid=student.studentno;
#左外连接 left join SELECT student.studentno,studentname FROM student LEFT JOIN grade ON grade.gradeid=student.studentno;
#右外连接 SELECT student.studentno,studentname FROM student RIGHT JOIN grade ON grade.gradeid=student.studentno;
#等值连接 SELECT student.studentno,studentname FROM student student,grade WHERE grade.gradeid=student.studentno;
#非等值连接 返回的是左边表里的行数乘以右边表里的行数
#返回两个日期的天数 SELECT DATEDIFF(NOW(),‘1997-10-31’)