一.安装mysql
彻底删除mysql并且重装的方法
删除
sudo apt purge mysql-*
sudo rm -rf /etc/mysql/ /var/lib/mysql
sudo apt autoremove
sudo apt autoreclean
重装
sudo apt-get install mysql-server mysql-client
二.启动mysql
sudo service mysql start ##启动mysql服务器;
mysql -u root -p ##root用户链接服务器,并输入密码;
mysql> SELECT VERSION(), CURRENT_DATE; ##查询版本号和当前日期;
mysql大小写是等价的,一般关键字大写;
mysql>SELECT SIN(PI()/4, (4+1)*5);
两个简单的计算;
三.创建数据库并插入数据
mysql> CREATE DATABASE mysql_shiyan; ##创建一个数据库
mysql> show databases; ##显示有哪些数据库
mysql> use mysql_shiyan; ##连接刚刚创建的数据库,成功后显示database changed
mysql>show tables; ##查看数据库中的表
mysql>CREATE TABLE employee(id int(10), name char(20), phone int(12));
创建一个表employee ,里面包含三列
mysql> CREATE TABLE department
-> (
-> dpt_name CHAR(20),
-> dpt_phone INT(12)
-> );
再创建一个department的table
数据类型 大小(字节) 用途 格式
INT 4 整数
FLOAT 4 单精度浮点数
DOUBLE 4 双精度浮点数
ENUM 单选,比如性别 ENUM('a','b','c')
SET 多选 SET('1','2','3')
DATE 3 日期 YYYY-MM-DD
TIME 3 时间点或持续时间 HH:MM:SS
YEAR 1 年份值 YYYY
CHAR 0~255 定长字符串
VARCHAR 0~255 变长字符串
TEXT 0~65535 长文本数据
mysql> SELECT * FROM employee; ##查看employee中的所有数据
mysql>INSERT INTO employee(id,name,phone) VALUES(01,’Tom’,110110110);
在employee中插入一个数据;
插入SQL代码:source,如:
Mysql>source /home/shiyanlou/Desktop/MySQL-04-01.sql
mysql>exit; ##退出mysql,吃饭去了
四.约束
cd Desktop
git clone http://git.shiyanlou.com/shiyanlou/SQL3
sudo service mysql start
mysql -u root -p
w23256010
1.主键
主键 (PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。行中的主键不能有重复且不能为空。
2.默认值约束
3.唯一约束
4.非空约束
5.外键约束
五.SELECT语句
首先生成三张表格department,employee,和project;
1.基本语句:
SELECT 列名 FROM 表名 WHERE 限制条件;
SELECT name,age FROM employee WHERE age>25;
SELECT name,age,phone FROM employee WHERE name='Mary';
2.AND且 OR或
SELECT name,age FROM employee WHERE age<25 OR age>30;
SELECT name,age FROM employee WHERE age>25 AND age<30;
3.IN 和 NOT IN
SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
4.通配符
其中 _ 代表一个未指定字符,% 代表不定个未指定字符
SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';
SELECT name,age,phone FROM employee WHERE name LIKE 'J%';
5.对结果排序
默认情况下,ORDER BY的结果是升序排列,而使用关键词ASC和DESC可指定升序或降序排序。 比如,我们按salary降序排列,SQL语句为:
SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
7.内置函数和计算
函数名: COUNT SUM AVG MAX MIN
作用: 计数 求和 求平均值 最大值 最小值
SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee; ##AS的作用是重命名
8.子查询
设计多个表才能获得所需信息;
如想要知道Tom所在部门做了几个工程
SELECT of_dpt,COUNT(proj_name) AS count_project FROM project
WHERE of_dpt IN
(SELECT in_dpt FROM employee WHERE name='Tom');
9.连接查询JOIN
把多个表当成一个表来使用
SELECT id,name,people_num
FROM employee,department
WHERE employee.in_dpt = department.dpt_name
ORDER BY id;
定价于
SELECT id,name,people_num
FROM employee JOIN department
ON employee.in_dpt = department.dpt_name
ORDER BY id;
六.数据库的删除和修改
删除一个database
mysql> DROP DATABASE ‘database name’;
修改表名
RENAME TABLE former_name TO new_name;
ALTER TABLE former_name TO new_name;
ALTER TABLE former_name TO new_name;
删除table
DROP TABLE table_name;
对表的修改
1.增加一列
ALTER TABLE table name ADD COLUMN column_name data_type restrict;
ALTER TABLE table name ADD column_name data_type restrict;
规定列的位置
ALTER TABLE employee ADD weight INT(4) DEFAULT 120 AFTER age;
把weight加入age的后面;
或者在最后加上FIRST加在最前面;
2.删除一列
ALTER TABLE 表名字 DROP COLUMN 列名字;
ALTER TABLE 表名字 DROP 列名字;
3.重命名一列
ALTER TABLE 表名字 CHANGE 原列名 新列名 数据类型 约束;
后面的数据类型不能省略,否则重命名失败
4.改变数据类型
ALTER TABLE 表名字 MODIFY 列名字 新数据类型;
对表的内容修改
1.修改表中的某个值
UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 条件;
例如把’Tom’的age改为21,salary改为3000;
SELECT * FROM employee WHERE name=’Tom’;
UPDATE employee SET age=21,salary=3000 WHERE name=’Tom’;
2.删除一行记录
DELETE FROM 表名字 WHERE 条件;
六.索引及其他基本操作
1.索引
索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容。
当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录。这样做会消耗大量数据库系统时间,并造成大量磁盘 I/O 操作。
而如果在表中已建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据,可以大大加快查询速度。
对某个列添加索引:
ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
CREATE INDEX 索引名 ON 表名字 (列名);
2.视图
视图是从一个或多个表中导出来的表,是一种虚拟存在的表。
CREATE VIEW 视图名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
打印视图:
SELECT * FROM v_emp;
3.导入导出
LOAD DATA INFILE ‘文件路径’ INTO TABLE 表名字;
报错:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
是因为mysql没有修改本地文件的权限,除非修改权限;
输入mysql>show variables like '%secure%'; ##这个语句屌爆了
找到了secure_file_priv在/var/lib/mysql-files/
于是把load的文件放在这个路径下就行了.
sudo cp 想要移动的文件或路径 移动后的路径
-b 同名,备分原来的文件 -f 强制覆盖同名文件 -r 按递归方式保留原目录结构复制文件
导出也一样要在secure_file_priv路径下,语句是:
Mysql>SELECT 哪几列 INTO OUTFILE ‘文件路径’ FROM 表名字;
4.备份
mysqldump -u root -p 数据库名>备份文件名; #备份整个数据库
mysqldump -u root -p 数据库名 表名字>备份文件名; #备份整个表
5.恢复
source 就是一条恢复语句
七.MySQL服务安装及命令使用
Linux必须安装MySQL-server和MySQL-client,想要更高级还要MySQL-Max RPM