<code> SQL介绍及mysql的安装 SQL同时也是数据库脚本文件的扩展名。 1、打开MySQL sudo service mysql start #打开MySQL服务 mysql -u root #使用root用户登录 2、查看数据库 “show databases;” 3、连接数据库 use <数据库名> 4、查看表 “show tables; 创建数据库并插入数据 1、新建数据库 CREATEDATABASE mysql_shiyan; 2、连接数据库 “use <数据库名字>” 4、新建数据表 CREATETABLE 表的名字 ( 列名a 数据类型(数据长度), 列名b 数据类型(数据长度), 列名c 数据类型(数据长度) ); CREATETABLE employee (id int(10),name char(20),phone int(12)); mysql> create table employee -> ( -> name CHAR(20), -> num INT(12) -> ); Query OK, 0 rows affected (0.02 sec) mysql> create table employee -> ( -> name CHAR(20), -> num INT(12) -> ); Query OK, 0 rows affected (0.02 sec)</code>
CHAR和VARCHAR的区别: CHAR的长度是固定的,而VARCHAR的长度是可以变化的,比如,存储字符串“abc”,对于CHAR (10),表示存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR(12)则只占用3个字节的长度,12只是最大值,当你存储的字符小于12时,按实际长度存储。
<code> ENUM和SET的区别: ENUM类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而SET类型的值则可以多选。 我们通过INSERT语句向表中插入数据,语句格式为 INSERTINTO 表的名字(列名a,列名b,列名c) VALUES(值1,值2,值3); INSERT INTO employee(id,name,phone) VALUES(01,'Tom',110110110); INSERT INTO employee VALUES(02,'Jack',119119119); INSERT INTO employee(id,name) VALUES(03,'Rose'); 5、查看表格内容 SELECT * FROM <表格名字> </code>
约束
<code> 1、约束分类 约束类型: 主键 默认值 唯一 外键 非空 关键字: PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL 2、建立含约束的表 git clone https://github.com/shiyanlou/SQL3 mysql> source /home/shiyanlou/Desktop/SQL3/MySQL-03-01.sql 3、主键 主键(PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键要求这一行的数据不能有重复且不能为空。 4、默认值约束 5、唯一约束 6、外键约束 外键(FOREIGN KEY)既能确保数据完整性,也能表现表之间的关系。 一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。 7、非空约束 </code>
select详解
<code> 1、基本的SELECT语句 SELECT语句的基本格式为: SELECT 要查询的列名 FROM 表名字 WHERE 限制条件; SELECT name,age FROM employee; 2、数学符号条件 WHERE限制条件可以有数学符号 (=,<,>,>=,<=) SELECT name,age FROM employee WHERE age>25; SELECT name,age,phone FROM employee WHERE name='Mary'; 3、“AND”与“OR” OR(或)和AND(且)连接: SELECT name,age FROM employee WHERE age30; #筛选出age大于25,或age大于30 而刚才的限制条件 age30 可以替换为 age BETWEEN 25 AND 30 ,结果是一样的: 4、IN和NOT IN 用于筛选“在”或“不在”某个范围内的结果 SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4'); 5、通配符 关键字 LIKE 在SQL语句中和通配符一起使用, 其中 _ 代表一个未指定字符,% 代表不定个未指定字符。 SELECT name,age,phone FROM employee WHERE phone LIKE'1101__'; SELECT name,age,phone FROM employee WHERE name LIKE'J%'; 6、对结果排序 默认情况下,ORDER BY的结果是升序排列,而使用关键词ASC和DESC可指定升序或降序排序。 SELECT name,age,salary,phone FROM employee ORDERBY salary DESC; 7、SQL内置函数和计算 函数名: COUNT SUM AVG MAX MIN 作用: 计数 求和 求平均值 最大值 最小值 SELECTMAX(salary) AS max_salary,MIN(salary) FROM employee; mysql> select max(salary),min(salary) from employee; 使用AS关键词可以给值重命名,比如最大值被命名为了max_salary: 8、子查询 上面讨论的SELECT语句都仅涉及一个表中的数据,然而有时必须处理多个表才能获得所需的信息 。 SELECT of_dpt,COUNT(proj_name) AS count_project FROM project WHERE of_dpt IN (SELECT in_dpt FROM employee WHERE name='Tom'); 子查询还可以扩展到3层、4层或更多层。 9、连接查询 在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接(join)操作。 SELECT id,name,people_num FROM employee,department WHERE employee.in_dpt = department.dpt_name ORDERBY id; 另一个连接语句格式是使用JOIN ON语法,刚才的语句等同于: SELECT id,name,people_num FROM employee JOIN department ON employee.in_dpt = department.dpt_name ORDERBY id; </code>
修改和删除
<code> 1、对数据库的修改 现在我们运行命令删除名为test_01的数据库: DROPDATABASE test_01; 2、对一张表的修改 (1)重命名一张表 RENAME TABLE 原名 TO 新名字;ALTER TABLE 原名 RENAME 新名;ALTER TABLE 原名 RENAME TO 新名; (2)删除一张表 DROPTABLE 表名字; 3、对一列的修改(即对表结构的修改) (1)增加一列 ALTER TABLE 表名字 ADD COLUMN 列名字 数据类型 约束; 或: ALTER TABLE 表名字 ADD 列名字 数据类型 约束; 如果要把增加的列插入在指定位置,则需要在语句的最后使用AFTER关键词(“AFTER 列1” 表示新增的列被放置在 “列1” 的后面)。 ALTERTABLE employee ADD test INT(10) DEFAULT11FIRST; (2)删除一列 ALTER TABLE 表名字 DROP COLUMN 列名字; 或: ALTER TABLE 表名字 DROP 列名字; (3)重命名一列 ALTERTABLE 表名字 CHANGE 原列名 新列名 数据类型 约束; 注意:这条重命名语句后面的 “数据类型” 不能省略,否则重命名失败。 当原列名和新列名相同的时候,指定新的数据类型或约束,就可以用于修改数据类型或约束。需要注意的是,修改数据类型可能会导致数据丢失,所以要慎重使用 (4)改变数据类型 ALTERTABLE 表名字 MODIFY 列名字 新数据类型; 再次提醒,修改数据类型必须小心,因为这可能会导致数据丢失。在尝试修改数据类型之前,请慎重考虑。 4、对表的内容修改 (1)修改表中某个值 UPDATE 表名字 SET 列1=值1,列2=值2WHERE 条件; 注意:一定要有WHERE条件,否则会出现你不想看到的后果 (2)删除一行记录 删除表中的一行数据,也必须加上WHERE条件,否则整列的数据都会被删除。删除语句: DELETEFROM 表名字 WHERE 条件; </code>
其它
<code> 1、索引 在表中已建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据,可以大大加快查询速度。 对一张表中的某个列建立索引,有以下两种语句格式: ALTERTABLE 表名字 ADDINDEX 索引名 (列名); CREATEINDEX 索引名 ON 表名字 (列名); 这里我们使用命令 SHOW INDEX FROM 表名字; 查看刚才新建的索引 在使用SELECT语句查询的时候,语句中WHERE里面的条件,会自动判断有没有可用的索引; 2、视图 注意理解视图是虚拟的表: 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中; 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据; 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变; 在使用视图的时候,可以把它当作一张表。 创建视图的语句格式为: CREATEVIEW 视图名(列a,列b,列c) ASSELECT 列1,列2,列3FROM 表名字; 可见创建视图的语句,后半句是一个SELECT查询语句,所以视图也可以建立在多张表上,只需在SELECT语句中使用子查询或连接查询 3、导入 LOADDATAINFILE'文件路径'INTOTABLE 表名字; 4、导出 导出与导入是相反的过程,是把数据库某个表中的数据保存到一个文件之中。导出语句基本格式为: SELECT 列1,列2INTOOUTFILE'文件路径和文件名'FROM 表名字; 注意:语句中 “文件路径” 之下不能已经有同名文件 5、备份 备份与导出的区别:导出的文件只是保存数据库中的数据;而备份,则是把数据库的结构,包括数据、约束、索引、视图等全部另存为一个文件。 mysqldump是MySQL用于备份数据库的实用程序。它主要产生一个SQL脚本文件,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。 使用mysqldump备份的语句: mysqldump -u root 数据库名>备份文件名; #备份整个数据库 mysqldump -u root 数据库名 表名字>备份文件名; #备份整个表 6、恢复 source /tmp/SQL6/MySQL-06.sql mysql -u root test < bak.sql</code>