设为首页收藏本站我的广告

运维网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
总共321条微博

每日一博

查看: 472|回复: 1

[分享] 【重大新闻】 SQL 基本语法详解【顶】

[复制链接]
  • TA的每日心情
    开心
    2014-11-21 11:00
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    cnyunwei 发表于 2015-10-16 09:00:00 | 显示全部楼层 |阅读模式
    【重大新闻】 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 <数据库名字>”

    3、新建数据表
    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)


    CHAR和VARCHAR的区别: CHAR的长度是固定的,而VARCHAR的长度是可以变化的,比如,存储字符串“abc”,对于CHAR (10),表示存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR(12)则只占用3个字节的长度,12只是最大值,当你存储的字符小于12时,按实际长度存储。


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

    4、查看表格内容
    SELECT * FROM  <表格名字>

    约束

    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、非空约束

    select详解

    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;

    修改和删除

    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 条件;

    其它

    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

    来自群组: 北京运维圈
    运维网 感谢您的阅读
    [发帖际遇]: cnyunwei 乐于助人,奖励 4 . 幸运榜 / 衰神榜
    回复过本主题
    的还回复过:

    该用户从未签到

    www.rzjdcy.com 发表于 2015-12-24 17:07:47 | 显示全部楼层
    真正围观中...-_-











    潮人特色论坛_sm论坛_sp论坛_kb论坛_bb论坛_恋母论坛_绿帽论坛_潮人特色:www.crtslt.com/bbs
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|申请友链|sitemap|手机版|小黑屋|Archiver|运维网 ( 京ICP备16008201号  

    GMT+8, 2016-12-5 12:30 , Processed in 0.112920 second(s), 39 queries , Xcache On.

    Powered by Discuz! X3.2 Licensed

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表