SQL 学习

1. 安装

1.1 安装检查

命令:sudo service mysql start
结果:

  • 未安装:mysql: unrecognized service

1.2 安装

  • 安装 MySQL 服务端、核心程序
    sudo apt-get install mysql-server
  • #安装 MySQL 客户端
    sudo apt-get install mysql-client
  • 验证安装
    sudo netstat -tap | grep mysql
  • 使用
    sudo service mysql start
    mysql -u root
  • 查看数据库
    show databases;
  • 连接数据库
    use <数据库名>
  • 查看表
    show tables;
  • 退出
    exit / quit

2 数据库基本

2.1 创建数据库

CREATE DATABASE mysql_shiyan;
mysqladmin -u root -p create mysql_shiyan;

2.2 删除数据库

drop database <数据库名>;
mysqladmin -u root -p drop <数据库名>;

2.3 选择数据库

use <数据库名字>:

2.4 创建数据表

CREATE TABLE table_name (column_name column_type);
CREATE TABLE employee (id int(10),name char(20),phone int(12));

2.5 插入数据

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’);

2.6 导入数据

2.6.1 mysql 命令导入

mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql)
例:mysql -uroot -p123456 < runoob.sql

2.6.2 source 命令导入

例:mysql> source /home/abc/abc.sql # 导入备份数据库
注:source 命令导入数据库需要先登录到数库终端

2.6.3 使用 LOAD DATA 导入数据

例:mysql> LOAD DATA LOCAL INFILE ‘dump.txt’ INTO TABLE mytbl;

2.6.4 使用 mysqlimport 导入数据

例:mysqlimport -u root -p --local mytbl dump.txt
mysqlimport的常用选项介绍
在这里插入图片描述

2.7 列的修改

  • 增加一列
    ALTER TABLE 表名字 ADD COLUMN 列名字 数据类型 约束;
    或:
    ALTER TABLE 表名字 ADD 列名字 数据类型 约束;
    
  • 删除一列
    ALTER TABLE 表名字 DROP COLUMN 列名字;
    或:
    ALTER TABLE 表名字 DROP 列名字;
    
  • 重命名一列
    ALTER TABLE 表名字 CHANGE 原列名 新列名 数据类型 约束;
    
  • 改变数据类型
    ALTER TABLE 表名字 MODIFY 列名字 新数据类型;
    

2.8 表的内容修改

  • 修改某一个值
UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 条件;
例:UPDATE employee SET age=21,salary=3000 WHERE name='Tom';
  • 删除一行记录
DELETE FROM 表名字 WHERE 条件;
例:DELETE FROM employee WHERE name='Tom';

3 数据类型

3.1 数值类型

在这里插入图片描述

3.2 日期和时间类型

在这里插入图片描述

3.3 字符串类型

在这里插入图片描述

4 SQL约束

约束类型主键默认值唯一外键非空
关键字PRIMARY KEYPRIMARY KEYPRIMARY KEYPRIMARY KEYPRIMARY KEY

4. 1主键(唯一性)

基本形式单一主键复合主键默认值
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.2 唯一约束

create table test(
    id int unsigned auto_increment,
    name varchar(50) not null,
    age int unsigned,
    unique(name),
    primary key(id)
);

注: 唯一约束 (UNIQUE) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。

4.3 外键约束

4.3.1 创建表时直接创建外键约束
create table books(
    bookid number(10) not null primary key,
    bookName varchar2(20) not null,
    price number(10,2),
    categoryId int,
    CONSTRAINT FK_categoryId foreign key(categoryId) not null references Category(id)  --外键约束
);

注:必须先创建参照表,才能在创建外键约束,即必须现有表Category,再有book

4.3.2 先创建表,表创建成功后,单独添加外键约束
create table books(
    bookid number(10) not null primary key,
    bookName varchar2(20) not null,
    price number(10,2),
    categoryId number(10) not null
);

ALTER TABLE  books ADD CONSTRAINT FK_Book_categoryid FOREIGN KEY(categoryId ) REFERENCES Category(id);
4.3.3 删除外键
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

4.4 非空约束

注:非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。

5 SELECL 语句

基本语法:SELECT 要查询的列名 FROM 表名字 WHERE 限制条件;
WHERE限制条件

  • 数学符号: (=,<,>,>=,<=)

    • SELECT name,age FROM employee WHERE age>25;
  • 逻辑关系:[条件一 OR 条件二]] 和 [条件一 AND 条件二]

    • SELECT name,age FROM employee WHERE age<25 OR age>30;
  • 边界包含:BETWEEN

    • SELECT name,age FROM employee WHERE age BETWEEN 25 AND 30;
  • 在与不在:IN 和 NOT IN

    • SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
  • LIKE 通配符

    • _ 代表一个未指定字符,% 代表不定个未指定字符
    • SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';
    • SELECT name,age,phone FROM employee WHERE name LIKE 'J%';
  • 结果排序

    • ORDER BY 排序,默认升序;键词 ASC 和 DESC 可指定升序或降序排序
    • SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
  • SQL 内置函数

    函数名COUNTSUMAVGMAXMIN
    作用计数求和取平均最大最小

    SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;
    注:AS 重命名

  • 子查询
    HAVING 关键字可以的作用和 WHERE 是一样的,都是说明接下来要进行条件筛选操作。区别在于 HAVING 用于对分组后的数据进行筛选;

    SELECT of_dpt,COUNT(proj_name) AS count_project 
    FROM project GROUP BY of_dpt HAVING of_dpt IN 
    (SELECT in_dpt FROM employee WHERE name='Tom');
    
  • 连接查询
    连接 (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;
    

    注: GROUP BY 后的唯一性

6 索引

索引:可以加快查询速度

ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
CREATE INDEX 索引名 ON 表名字 (列名);

查看索引:
SHOW INDEX FROM 表名字;

7 视图

视图为结果虚拟表

  • 创建视图
    CREATE VIEW 视图名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
    
  • 修改视图
    alter view 视图名 as select 语句
    
  • 删除视图
    drop view 视图名[,视图名…];
    
  • 重命名视图
    Rename table 视图名 to 新视图名;
    
  • 查看视图
    Show tables;
    

8 数据操作

  • 数据导入

    LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名字;
    

    注:导入导出大量数据都属于敏感操作,根据 mysql 的安全策略,导入导出的文件都必须在指定的路径下进行,在 mysql 终端中查看路径变量:

    mysql -uroot
    mysql> show variables like '%secure%';
    +--------------------------+-----------------------+
    | Variable_name            | Value                 |
    +--------------------------+-----------------------+
    | require_secure_transport | OFF                   |
    | secure_auth              | ON                    |
    | secure_file_priv         | /var/lib/mysql-files/ |
    +--------------------------+-----------------------+
    3 rows in set (0.00 sec)
    
  • 数据导出

    SELECT 列1,列2 INTO OUTFILE '文件路径和文件名' FROM 表名字;
    
  • 数据备份

    mysqldump -u root 数据库名>备份文件名;   #备份整个数据库
    mysqldump -u root 数据库名 表名字>备份文件名;  #备份整个表
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值