本文共 8943 字,大约阅读时间需要 29 分钟。
SHOW DATABASES* 切换(选择要操作的)数据库:
USE 数据库名* 创建数据库:
CREATE DATABASE [IF NOT EXISTS] mydb1 [CHARSET=utf8](【】为可省略部分)* 删除数据库:
DROP DATABASE [IF EXISTS] mydb1* 修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8
ALTER DATABASE mydb1 CHARACTER SET UTF-8
CREATE TABLE [IF NOT EXISTS] 表名( 列名 列类型 约束, 列名 列类型 约束, ... 列名 列类型 约束 );* 查看当前数据库中所有表名称:
SHOW TABLES;* 查看指定表的创建语句:
SHOW CREATE TABLE 表名(了解);* 查看表结构:
DESC 表名* 删除表:
DROP TABLE 表名;* 修改表: > 修改之添加列:
ALTER TABLE 表名 ADD( 列名 列数据 列约束, ................... 列名 列数据 列约束);> 修改之修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在数据):
ALTER TABLE 表名 MODIFY 列名 列类型
> 修改之修改列名:
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;> 修改之删除列:
ALTER TABLE 表名 DROP 列名;> 修改表名称:
ALTER TABLE 原表名 RENAME TO 新表名;
INSERT INTO 表名(列名1,列名2, ...) VALUES(列值1, 列值2, ...)> 在表名后给出要插入的列名,其他没有指定的列等同与插入null值。所以插入记录总是插入一行,不可能是半行。 > 在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应
INSERT INTO 表名 VALUES(列值1, 列值2)> 没有给出要插入的列,那么表示插入所有列。 > 值的个数必须是该表列的个数。 > 值的顺序,必须与表创建时给出的列的顺序相同。
UPDATE 表名 SET 列名1=列值1, 列名2=列值2, ... [WHERE 条件]* 条件(条件可选的): > 条件必须是一个boolean类型的值或表达式:UPDATE t_person SET gender='男', age=age+1 WHERE sid='1'; > 运算符:=、!=、<>、>、<、>=、<=、BETWEEN...AND、IN(...)、IS NULL、NOT、OR、AND
DELETE FROM 表名 [WHERE 条件];
SELECT * FROM 表名;--> 其中“*”表示查询所有列 2) 查询指定列
SELECT 列1 [, 列2, ... 列N] FROM 表名;3) 完全重复的记录只一次 当查询结果中的多行记录一模一样时,只显示一行。一般查询所有列时很少会有这种情况,但只查询一列(或几列)时,这总可能就大了!
SELECT DISTINCT 列名 FROM 表名;4) 列运算 I 数量类型的列可以做加、减、乘、除运算
SELECT SAL*15 AS SAL FROM EMP;II 字符串类型可以做连续运算
SELECT CONCAT('$', sal) FROM emp;III 转换NULL值 有时需要把NULL转换成其它值,例如com+1000时,如果com列存在NULL值,那么NULL+1000还是NULL,而我们这时希望把NULL当前0来运算。
SELECT IFNULL(comm, 0)+1000 FROM emp;如果为null则将null改为0IV 给列起别名 你也许已经注意到了,当使用列运算后,查询出的结果集中的列名称很不好看,这时我们需要给列名起个别名,这样在结果集中列名就显示别名了
SELECT ename AS name FROM studentAS 可以省略
SELECT * FROM emp WHERE ename LIKE '张_'--> 模糊查询需要使用运算符:LIKE,其中_匹配一个任意字符,注意,只匹配一个字符而不是多个。 --> 上面语句查询的是姓张,名字由两个字组成的员工。 如果我们想查询姓张,名字几个字可以的员工时就要使用“%”了。
SELECT * FROM emp WHERE ename LIKE '张%';--> 其中%匹配0~N个任意字符,所以上面语句查询的是姓张的所有员工。
SELECT * FROM WHERE emp ORDER BY sal ASC;--> 按sal排序,升序! --> 其中ASC是可以省略的 2) 降序
SELECT * FROM WHERE emp ORDER BY comm DESC;--> 按comm排序,降序! --> 其中DESC不能省略 3) 使用多列作为排序条件
SELECT * FROM WHERE emp ORDER BY sal ASC, comm DESC;--> 使用sal升序排,如果sal相同时,使用comm的降序排
聚合函数只能用在select,having中,不能用在where中
SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;--> 使用deptno分组,查询部门编号和每个部门的记录数
SELECT deptno, COUNT(*) FROM emp GROUP BY deptno HAVING COUNT(*) > 3;
SELECT * FROM emp LIMIT 4, 3;--> 其中4表示从第5行开始,其中3表示一共查询3行。即第5、6、7行记录。
CREATE TABLE stu( sid CHAR(6) PRIMARY KEY, sname VARCHAR(20), age INT, gender VARCHAR(10) );指定sid列为主键列,即为sid列添加主键约束
CREATE TABLE stu( sid CHAR(6), sname VARCHAR(20), age INT, gender VARCHAR(10), PRIMARY KEY(sid) );指定sid列为主键列,即为sid列添加主键约束 * 修改表时指定主键:
ALTER TABLE stu ADD PRIMARY KEY(sid);* 删除主键:
ALTER TABLE stu DROP PRIMARY KEY;
CREATE TABLE stu( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20), age INT, gender VARCHAR(10) );* 修改表时设置主键自增长:
ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;* 修改表时删除主键自增长:
ALTER TABLE stu CHANGE sid sid INT;
CREATE TABLE stu( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20) NOT NULL, age INT, gender VARCHAR(10) );* 对sname列设置了非空约束
CREATE TABLE stu( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20) NOT NULL UNIQUE, age INT, gender VARCHAR(10) );* 对sname列设置了非空约束
class Employee {//多方关联一方 ... private Department department; } class Department {//一方关联多方 ... private List我们知道用java语言表示对应关系很简单,但是如何使用表结构来表示对应关系呢?在讲解这个问题之前我们有必要了解一下外键约束employees; }
CONSTRAINT 约束名称 FOREIGN KEY(外键列名) REFERENCES 关联表(关联表的主键)修改表时添加外键约束
ALERT TABLE emp ADD CONSTRAINT fk_emp_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno);修改表时删除外键约束
ALTER TABLE emp DROP FOREIGN KEY fk_emp_deptno;/*约束名称*/
create table husband( hid int PRIMARY KEY, ... ); create table wife( wid int PRIMARY KEY, ... ADD CONSTRAINT fk_wife_wid FOREIGN KEY(wid) REFERENCES husband(hid) );这就完成了一对一关系。
create table student( sid int PRIMARY KEY, ... ); create table teacher( tid int PRIMARY KEY, ... ); create table stu_tea( sid int, tid int, ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid), ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES teacher(tid) );
SHOW VARIABLES LIKE 'char%';2. 编码解释 * character_set_client:MySQL使用该编码来解读客户端发送过来的数据,例如该编码为UTF8,那么如果客户端发送过来的数据不是UTF8,那么就会出现乱码 * character_set_results:MySQL会把数据转换成该编码后,再发送给客户端,例如该编码为UTF8,那么如果客户端不使用UTF8来解读,那么就会出现乱码 其它编码只要支持中文即可,也就是说不能使用latin1 3. 控制台乱码问题 * 插入或修改时出现乱码: > 这时因为cmd下默认使用GBK,而character_set_client不是GBK的原因。我们只需让这两个编码相同即可。 > 因为修改cmd的编码不方便,所以我们去设置character_set_client为GBK即可。 * 查询出的数据为乱码: > 这是因为character_set_results不是GBK,而cmd默认使用GBK的原因。我们只需让这两个编码相同即可。 > 因为修改cmd的编码不方便,所以我们去设置character_set_results为GBK即可。 * 设置变量的语句: > set character_set_client=gbk; > set character_set_results=gbk; 注意,设置变量只对当前连接有效,当退出窗口后,再次登录mysql,还需要再次设置变量。 为了一劳永逸,可以在my.ini中设置: 设置default-character-set=gbk即可。 4. 指定默认编码 我们在安装MySQL时已经指定了默认编码为UTF8,所以我们在创建数据库、创建表时,都无需再次指定编码。 为了一劳永逸,可以在my.ini中设置: 设置character-set-server=utf8即可。 character_set_client | utf8 --> mysql把我们客户端传递的数据都当成是utf8!一是给它传递utf8,二是如果我们传递的是gbk,那么需要修改这个变量为gbk character_set_connection | utf8 character_set_database | utf8 character_set_results | utf8 --> mysql发送给客户端的数据都是utf8的。一是客户端用utf8编码,二是如果客户端使用gbk来编码,那么需要修改这个变量为gbk的。 character_set_server | utf8 character_set_system | utf8
mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径注意,不要打分号,不要登录mysql,直接在cmd下运行 注意,生成的脚本文件中不包含create database语句 2. 执行SQL脚本 第一种方式
mysql -u用户名 -p密码 数据库注意,不要打分号,不要登录mysql,直接在cmd下运行
SELECT * FROM cdUNION ALLSELECT * FROM ab;
SELECT * FROM 表1 别名1, 表2 别名2 WHERE 别名1.xx=别名2.xx* 标准:
SELECT * FROM 表1 别名1 INNER JOIN 表2 别名2 ON 别名1.xx=别名2.xx* 自然:
SELECT * FROM 表1 别名1 NATURAL JOIN 表2 别名23. 外连接 * 左外:
SELECT * FROM 表1 别名1 LEFT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx左表记录无论是否满足条件都会查询出来,而右表只有满足条件才能出来。左表中不满足条件的记录,右表部分都为NULL * 右外:
SELECT * FROM 表1 别名1 RIGHT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx右表记录无论是否满足条件都会查询出来,而左表只有满足条件才能出来。右表不满足条件的记录,其左表部分都为NULL * 全链接:可以使用UNION来完成全链接 子查询
SELECT a.*,b.dname,b.locFROM (SELECT emp.deptno,COUNT(*)AS con FROM emp GROUP BY emp.deptno) AS a, dept AS bWHERE a.deptno=b.deptno
转载地址:http://huelf.baihongyu.com/