您的位置:新葡亰496net > 网络数据库 > MySQL数据类型与操作数据表,SQL学习笔记1

MySQL数据类型与操作数据表,SQL学习笔记1

发布时间:2019-10-20 23:45编辑:网络数据库浏览(197)

    转载地址:

     * 以下内容是我在学习SQL()的时候的学习笔记

    MySQL常用数据类型
    整数:tinyint,smallint,int,bight
    浮点数:float(p(所占总位数)、s(小数点所占位数))4字节
    double(p、s)8字节
    定点数:decimal(p、s)
    日期/时间:data、time、datatime
    文本:char、varchar、text
    二进制:bit
    1.整形
    MYSQL数据类型-整型
    TINYINT------1个字节---负128~127 ,无符号0到255
    SMALLINT- --2个字节----负32768到32767, 0到65535
    MEDIUMINT----3个字节---负8388608到8388607, 0到16777215
    INT----------4个字节---负2147483648到2147483647 0到4294967295
    BIGINT-------8个字节----2的63次方~2的63次方-1;无符号:0~2的64次方-1;
    2浮点型:
    @MySQL——(二)数据类型与操作数据表——浮点型
    1、浮点型
    FLOAT[(M,D)]:这里M指总位数,D指小数点后位数。如FLOAT(7,2)则能表示的最大值为:99999.99
    DOUBLE[(M,D)]
    2、一般情况下使用FLOAT足够
    1.float[M,D],4个字节
    2.double[M,D],8个字节
    (M-总位数,D-小数位数)
    时间和日期
    1、YEAR:1970至2069
    2、TIME:-838:59:59至838:59:59
    3、DATE:1000-1-1至9999-12-31
    4、DATETIME: 1000-1-1 00:00:00至9999-12-31 23:59:59
    5、TIMESTAMP存储范围:1970-1-1 00:00:00到2037-12-31 23:59:59
    MySQL数据类型(4):字符型
    1、CHAR(M):定长类型,比如CHAR(5),如果我们只赋值abc,那么系统会自动在后面补两个空格0——255
    2、VARCHAR(M):变长类型,L 1个字节,其中L<=M且0<=M0——65535
    3、ENUM('value1','value2'...)枚举值,提供几个选项,选择其中一个,如:性别('男','女','保密')
    4、SET('value1','value2'...) 最多64个成员,可以任选里面其中几个,任意排列组合
    MEDIUMTEXT -L 3字节, L<2^24
    LONGTEXT -L 4字节, L<2^32
    ENUM('value1','value2'...) -1或2个字节,取决于枚举值的个数(最多65535个值)
    SET('value1','value2'...) -1、2、3、4或8个字节,取决于set成员的数目(最多64个成员)
    比如char(M)的说明,官方说的是:会占用M × w个字节, 0 <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set。w的意思是某种字符编码中占用的最大空间。所以实际上这里M的意思就是实际的字符个数的意思, 即使这个这种编码下每个字符占用2个字节、3个字节,也能存储最大255个字符。并不是如ppt中所说的最大M个字节。
    还有关于varchar(M)的说法,官方说的是:L 1 bytes if column values require 0 − 255 bytes, L 2 bytes if values may require more than 255 bytes。所以这里不一定是L 1,还可能是L 2。ppt中所说的最长是65535个字节,但是又是L 1,1个字节明显是不够存储那么大的长度的,所以ppt还是有些出入的。
    还有其他的tinytext,text,mediumtext,longtext,这些类型最大长度就是2^8-1个字节,2^16-1字节,2^24-1个字节,2^32-1个字节,如果某种字符编码中,每个字符占用2个字节,那么总的可以存储的字符数就要打折。
    @MySQL——(二)数据类型与操作数据表——创建数据表
    一、数据表
    1、数据表(或表)是数据库最重要的组成部分之一,是其他对象的基础
    2、表是一个二维表,行称为【记录】,列称为【字段】
    二、创建数据表
    1、首先打开数据库(数据库要存在): USE 数据库名称
    2、创建数据表:CREATE TABLE [IF NOT EXISTS] table_name(
    column_name(列名称) data_type(列类型),
    .... )
    举例——
    CREATE TABLE tb1(
    username VARCHAR(20),
    userage TINYINT UNSIGNED,
    salary FLOAT(8,2) UNSIGNED,
    );
    UNSIGNED 无符号

     

     * 学习时使用的数据库软件是MySQL数据库可视化工具SQLyogEnt


    * 以下内容是我在学习SQL()的时候的学习笔记

     * 如果大家有发现什么不对的地方请告诉我。谢啦!!☆⌒(*^-゜)v

    查看数据
    查看数据表:(查看选择的数据库的表)
    SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr];(可以用来查看其他数据库的表列表)
    例:
    SHOW TABLES;//查看当前选择的数据库的所有表
    SHOW TABLES FROM TEST;//查看TEST数据库中的所有表,当前选择数据库位置不变。
    SELECT DATABASE();//查看当前选择的数据库
    SHOW TABLES [FROM db_name]
    [LIKE 'pattern' | WHERE expr]
    既可以查看当前数据库中的数据表,也可查看其他数据库中的数据表

     * 学习时使用的数据库软件是MySQL数据库可视化工具SQLyogEnt

    MySQL数据类型与操作数据表,SQL学习笔记1。 * 在这里需要注意的是,和SqlServer相比MySQL不支持事务处理,没有视图,没有存储过程和触发器,没有数据库端的用户自定义函数,不能完全使用标准的SQL语法

    mysql> show databases;
    --------------------
    | Database |
    --------------------
    | information_schema |
    | bookstore |
    | mysql |
    | yggl |
    --------------------
    4 rows in set
    mysql> use bookstore;
    Database changed
    mysql> show tables;
    ---------------------
    | Tables_in_bookstore |
    ---------------------
    | book |
    ---------------------
    1 row in set
    mysql> show tables from bookstore;
    ---------------------
    | Tables_in_bookstore |
    ---------------------
    | book |
    ---------------------
    1 row in set
    .查看数据表列表
    1.查看数据表列表
    SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]
    SHOW TABLES; //查看当前数据库中的表
    SHOW TABLES FROM mysql;
    FROM之后,当前数据库不会发生改变
    SHOW COLUMNS FROM tb1; 查看tb1中的数据表结构
    记录查找
    查看数据表
    SHOW table-name;
    插入记录
    INSERT [INTO] table-name [(column-name,......)] VALUES(val,....); \字符要加''号。
    \table-name后面没有标明插入列的情况下,每一列的值都要按顺序插入才行。
    记录查找
    SELECT expr,...FROM table-name;
    SELECT * FROM test; \*号是现实全部字段。
    SELECT 查找关键字 expr 字段 *表示全部
    FROM tb1_name哪个数据表
    空值与非空
    一、数据表(或表)是数据库最重要的组成部分之一,是其他对象的基础。
    数据表是一个二维表,行称为【记录】,列称为【字段】
    二、创建数据表
    1、首先打开数据库(数据库要存在): USE 数据库名称
    2、创建数据表:CREATE TABLE [IF NOT EXISTS] table_name(
    column_name(列名称) data_type(列类型),
    .... )
    举例:
    CREATE TABLE tb1(
    username VARCHAR(20),
    userage TINYINT UNSIGNED,
    salary FLOAT(8,2) UNSIGNED,
    );
    UNSIGNED 无符号
    空值与非空:NULL,字段值可以为空 NOT NULL,字段值禁止为空,不赋值会报错
    三、查看数据表列表
    1、查看数据表是否存在:SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr ]
    2、查看某个表中所有列的信息:SHOW COLUMNS FROM tbl_name;
    四、记录的插入
    1、插入记录 INSERT [INTO] tbl_name [(col_name,...) ] VALUES(val1,val2,....)
    2、部分字段赋值使用(col_name1,col_name2,...)
    3、插入列col_name可以省略,但必须为所有字段输入信息,否则报错
    五、记录的查找
    1、查找记录:SELECT expr,... FROM tbl_name;
    SELECT * FROM tbl_name;

     * 如果大家有发现什么不对的地方请告诉我。谢啦!!☆⌒(*^-゜)v

     

    自动编号
    1.自动编号 AUTO_INCREMENT
    自动编号,且必须与主键配合使用
    2.自动编号AUTO_INCREMENT作用
    1、自动编号:保证记录的唯一性
    2、类型必须为整型(可以是FLOAT(5,0)等,小数点后必须为0),必须和主键PRIMARY KEY组合使用
    3、默认情况下,起始值为1,每次的增量为1
    默认情况下,起始值为1, 每次增量为1.
    CREATE TABLE tb3(
    id SMALLINT UNSIGNED AUTO_INCREMENT,
    username VARCHAR(30) NOT NULL); //报错,自动增量字段必须设置成主键
    主键约束

     

    第一章 SQL基础教程

    主键可以写为PRIMARY KEY,也可以写成KEY
    每张数据表只能存在一个主键
    主键保证记录的唯一性
    主键自动为NOT NULL,也就是说必须要为主键赋值。但如果主键选择了AUTO_INCREMENT,那么不需要手动赋值。
    auto_increment必须和主键primary key一起使用,但是主键primary key不一定要和auto_increment一块使用
    (主键的字段是可以赋值的,但不能赋相同的值)
    主键约束
    1、唯一性(可以赋值但是不能给两个记录赋一样的值)每张表只存在一个主键
    2、非空,插入方式与NOT NULL一样
    3、自动编号(AUTO_INCREMENT)必须与主键(PRIMARY KEY)搭配使用,主键可以不与自动编号一起使用
    创建一个带主键的表:
    CREATE TABLE user(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) NOT NULL
    -> );
    Database changed
    接着一次插入数据 便会有编号出现 但是如果删除了 编号会出现间断
    唯一约束
    唯一约束与主键约束的区别:
    UNIQUE KEY 一张数据表可以有多个,而PRIMARY KEY一张数据表只能有一个
    唯一约束的字段可以为空,主键约束的字段不能为空
    (唯一约束若多个字段为空,看起来似乎不能保证唯一性,但存储的只有一个‘空’,所以还是保证了字段的唯一性)
    UNIQUE KEY
    (1)唯一约束
    (2)唯一约束可以保证记录的唯一性
    (3)唯一约束的字段可以为空值(NULL)
    (4)每张数据表可以存在多个唯一约束

    第一章 SQL基础教程

    一、SQL简介

    默认约束

    一、SQL简介

    1:什么是SQL?

    1. 主键约束 primary key 与Auto_Increment 自动编号配合使用
    2. 唯一约束 unique key
    3. 默认约束 default
      示例:
      CREATE TABLE tb6(
      id SMALLINT UNSIGED AUTO_INCREMENT PRIMARY KEY,
      username VARCHAR(20) NOT NULL UNIQUE KEY,
      sex ENUM('1','2','3') DEFAULT '3',)//表示当sex没有赋值时,默认值为3
      总结
      数据类型 整型 (tinyint smallint mediumint int bigint)
      浮点型 (FLOAT{[M,D]},DOUBLE{[M,D]})M:总位数,D:小数点后位数
      日期 (YEAR DATE TIME TIMESTEMP)
      字符型 (CHAR VARCHAR TEXT)
      DOS 界面连接数据库 mysql -u用户名 -p密码 -hHOST
      显示数据库 SHOW DATABASES;
      显示表结构 SHOW COLUMNS FROM table;
      显示所有表 SHOW TABLES;
      进入数据库 USE 数据库;
      创建数据库 CREATE DATABASE 库名;
      创建表 CREATE TABLE 表名(字段及信息);
      插入数据 INSERT INTO table []VALUES();[]为空说明插入全部的值
      查询数据 SELECT 字段 FROM table WHERE 条件
      自增自动编号 auto_increment
      主键约束 PRIMARY KEY(有auto_increment的一定是主键,主键不一定有auto_increment)
      唯一约束UNIQUE KEY
      默认约束 DEFAULT 当没有赋值时则自动添加默认值
      4.非空约束:NOT NULL
      5.外键约束:
      *CREATE TABLE tb_name(
      ...,
      ...
      数据表操作:
      )//创建数据表(结构)
      *SHOW COLUMNS FROM tb_name//查看数据表结构(字段)
      *INSERT tb_name[(...)] VALUES(...)//向数据表内插入记录
      *SELECT *FROM tb_name//查看数据表的记录

    1:什么是SQL?

    A:SQL指结构化查询语句    B:SQL使我们有能力访问数据库     C:SQL是一种ANSI(美国国家标准化组织)的标准计算机语言


    A:SQL指结构化查询语句    B:SQL使我们有能力访问数据库     C:SQL是一种ANSI(美国国家标准化组织)的标准计算机语言

    2:SQL能做什么?

    约束以及修改数据表
    外键约束:
    FOREIGN KEY (子表字段名) REFERENCES 父表 (父表字段名)
    要求:保持数据一致性,完整性;实现一对一或一对多关系。
    数据表的存储引擎只能为InnoDB:配置文件中default-storage-engine=INNODB;
    父表和子表禁止使用临时表(子表:具有外键列的表;父表:子表参照的表)
    外键列和参照列必须具有相似的数据类型。数字长度或有无符号必须相同,字符长度可不同
    外键列和参照列必须创建索引。如果参照列不存在索引的话,MySQL将自动创建索引
    SHOW INDEXES FROM 表名 查询表格中的索引
    打开一个数据库
    USE test
    创建一个用户数据表
    CREATE TABLE users(
    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT
    -> username VARCHAR(10) NOT NULL
    ->pid SMALLINT UNSIGNED//pid和表province中id字段类型都要完全一样
    ->FOREIGN KEY (pid) REFERENCES provinces (id)
    ->);
    子表是users,父表是province
    外键列pid,参照列id,
    province的id加过主键,主键在创建的时候会自动创建索引。所以id字段上已经创建过索引,参照列已经有了索引
    显示索引SHOW INDEXES FROM province;
    外键列上我们没有为pid指定主键,系统自动创建索引
    在 MY.ini 文件中编辑默认的存储引擎:default-storage-engine=INNODB;
    显示创建表的语句:SHOW CREATE TABLE table_name;
    查看表是否有索引:SHOW INDEXS FROM table_name;
    以网格查看表是否有索引:SHOW INDEXS FROM table_nameG;
    Eg:
    CREATE TABLE table_name1(
    id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL
    )
    CREATE TABLE table_name2(
    id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20) NOT NULL,
    pid SMALLINT UNSIGNED,
    FOREIGN KEY (pid) REFERENCES table_name1(id) /* 外键 pid 参照 table_name1中的 id 字段 */
    )

    2:SQL能做什么?

    *面向数据库执行查询   *从数据库中取出数据   *向数据库插入新的记录   

    CASCADE:删除或更新父表中的数据相应的删除或更新子表中的相匹配的行;
    SHOW CREATE TABLE tb_name;//显示数据表创建时的命令;
    创建子表:users1;
    >CREATE TABLE users(
    >id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    >username VARCHAR(10) NOT NULL,
    >pid(外键) SMALLINT(与参照键类型相同) UNSIGNED(与参照键有无符号类型也要相同),//外键的作用体现在这:如果我们要添加一个省份的字段,需要添加个char型的,现在有了关系型数据库,我们只需要存储省份的id即可;
    >FOREIGN KEY (pid) PREFERENCES provinces (id) ON DELETE CASCADE,
    >);
    INSERT provinces(pname) VALUES('A');
    INSERT provinces(pname) VALUES('B');
    INSERT provinces(pname) VALUES('C');
    INSERT users1(username,pid) VALUES('Tom',1);
    INSERT users1(username,pid) VALUES('Jerry',2);
    INSERT users1(username,pid) VALUES('Lucy',3);
    当删除provinces中的id=3的数据C时,相应的users1中的Lucy也会被删掉,更新的话同样如此;
    SET NULL://从父表删除或更新行,会设置子表中的外键列为NULL,如果使用该选项,必须保证子表列没有指定NOT NULL
    RESTRICT://拒绝对父表的删除或更新操作;
    NO ACTION://标准的SQL语句,在MYSQL当中与RESTRICT相同
    实际开发中,我们很少使用物理的外键约束,而是使用逻辑约束;无理的外键约束只有innoDB这种存储引擎才会支持,MYISAM这种引擎就不支持物理的外键约束。反过来说,当我们使用到的引擎为MYISAM时,只能使用逻辑外键(即两个表的设计的逻辑关系)。
    外键约束的参照操作:
    1、CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。
    2、SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子列表没有指定NOT NULL。
    3、RESTRICT:拒绝对父表的删除或更新操作。
    4、NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。
    FOREIGN KEY (子表列名) REFERENCES FROM 父表名(父表列名)[ON DELETE|UPDATE CASCADE|SET NULL|RESTRICT|NO ACTION];
    在实际开发中,存储引擎不为INNODB,无法使用FOREIGN KEY,普遍使用逻辑方法。
    .表级约束与列级约束
    1.表级约束与列级约束
    (1)对一个数据列建立的约束,称为列级约束
    (2)对多个数据列建立的约束,称为表级约束
    (3)列级约束既可以在列定义时声明,也可以在列定以后声明
    (4)表级约束只能在列定义后声明
    2.主键、外键、非空、唯一、default都是约束条件。主键、外键、唯一既可以作为表级约束,也可作为列级约束
    ( not null, default )只有列级约束
    添加约束
    1.添加主键约束
    CONSTRAINT_PK主键名字为PK
    ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
    e.g:ALTER TABLE users ADD CONSTRAINT PK_users_id PRIMARY KEY (id);
    2.添加唯一约束
    ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)
    e.g:ALTER TABLE users ADD UNIQUE (username);
    3.添加外键约束
    ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name](index_col_name,...) reference_definition
    e.g:ALTER TABLE users ADD FOREIGN KEY (pid) REFERENCES provinces (id)
    4.添加/删除默认约束 DEFAULT
    ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
    e.g:
    ALTER TABLE users ADD age TINYINT UNSIGNED NULL;
    ALTER TABLE users ALTER age SET DEFAULT 15;
    ALTER TABLE users ALTER age DROP DEFAULT;
    删除约束
    一约束的 index_name 可通过 SHOW INDEX FROM table_nameG; 查询
    删除主键约束:
    ALTER TABLE table_name DROP PRIMARY KEY;
    删除唯一约束:
    ALTER TABLE table_name DROP INDEX index_name;
    删除外键约束:
    ALTER TABLE table_name DROP FOREIGN KEY (fk_symbol)通过查询系统默认给的名字;
    外键约束的名字 fk_symbol 可通过 SHOW CREATE TABLE table_name; 查询
    删除外键约束,查找CREATE TABLENAME 找到系统为外键约束添加的名字
    添加/删除列
    1、添加单列:如果指定FIRST,则在整个表的最前方,默认不写为整个表的最后方;如果指定AFTER col_name,则在col_name的后面。
    ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST AFTER col_name]
    2、添加多列:无法指定FIRST/AFTER、只能默认为最后方。
    ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,...)
    3、删除单列
    ALTER TABLE tbl_name DROP [COLUMN] col_name
    4、删除多列(Ps:删除一列的同时,新增一列。其间用逗号隔开)
    ALTER TABLE tbl_name DROP [COLUMN] col_name, DROP [COLUMN] col_name,DROP [COLUMN] col_name

    *面向数据库执行查询   *从数据库中取出数据   *向数据库插入新的记录   

    *更新数据库中数据   *从数据库删除记录   *创建数据库   *创建表   

    图片 1

    *更新数据库中数据   *从数据库删除记录   *创建数据库   *创建表   

    *创建存储过程   *创建视图   *设置表、存储过程和视图的权限

    操作数据表中的记录
    INSERT 插入记录
    1、INSERT 插入记录
    语法1:INSERT [INTO] 表名 [(列名1,列名2,...)] VALUES(列值1,列值2,...),(...),...;
    对于自动编号的字段,插入“NULL”或“DEFAULT”系统将自动依次递增编号;
    对于有默认约束的字段,可以插入“DEFAULT”表示使用默认值;
    列值可传入数值、表达式或函数,如密码可以用md5()函数进行加密(如md5('123'));
    可同时插入多条记录,多条记录括号间用逗号“,”隔开
    语法2:INSERT [INTO] 表名 SET 列名1=列值1, 列名2=列值2,...;
    这种方法一次只能插入一条记录;列值中有自动编号、默认值或Boolean类型均可以不赋值(使用子查询)
    语法3:INSERT [INTO] 表名(列名1,...) SELECT 列名1,... FROM 表名 [GROUP BY/HAVING/ORDER BY/LIMIT...];
    一般用于将其他表的数据插入到指定表,注意对应
    2、单表更新 UPDATE
    UPDATE 表名 SET 列名1=列值1 [,列名2=列值2, ...] [WHERE 条件];(如条件为 列名=列值 修改某一字段的值)
    省略条件则更新所有记录该列的值
    3、单表删除 DELETE
    DELETE FROM 表名 [WHERE 条件];
    省略条件则默认删除该表所有记录(仅删除所有记录,不删除数据表);
    插入自动编号的字段时,号数为已有的最大号数 1,即使中间有空号数也是如此(如12356,插入记录后为123567)
    INSERT// 插入记录
    第一种:
    insert tb_name [column_name]values(...)[,(...),(....)];--比较常用,可以一次性插入多条记录,并且可以输入表达式甚至是函数,但是无法进行子查询。
    第二种:
    insert tb_name set column_name={exprdefault};--可以进行子查询,但是只能插入一条记录的多个字段,但一次只能插入一条记录(INSERT [INTO] 表名 SET 列名1=列值1, 列名2=列值2,...;)。
    第三种:
    insert table_name [(colname...)] select语句.....--这种方法就是把查询到的一个表结果插入到另一个指定数据表中。
    单表更新
    单表更新:
    UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={exp1|DEFAULT}[,col_name2=...][WHERE where_condition] 【一般来说要用WHERE指定位置,不然所有数据都会被更新】
    例:
    不指定位置:UPDATE users set age = age 5,sex = 0; 使表里所有记录的age加5
    指定位置: UPDATE users set age = age 10 WHERE id % 2=0; 取id为偶数的位置
    update更新数据
    update <表名>
    set <列名>=<表达式>,[,<列名>=<表达式>]...
    [where <条件>];
    删除记录
    1、删除记录DELETE:分为单表删除和多表删除
    2、单表删除:DELETE FROM tbl_name [WHERE where_conditon];
    3、若不添加WHERE则删除【全部记录】
    删除后再插入,插入的id号从最大的往上加,而不是填补删除的。
    delete from users where id=6;
    insert users values (null,'111','222',33,null); 删除后再插入,插入的id号从最大的往上加,而不是填补删除的。
    查询表达式
    每一个表达式表示想要的一列,必须至少有一个
    多个列之间以英文逗号分隔
    星号(*)表示所以列 tbl_name.*可以表示命名表的所有列
    查询表达式可以使用[As]alias_name为其赋予别名
    别名可用于GROUP BY,ORDRE BY或HAVING子句
    SELECT 字段出现顺序影响结果集出现顺序,字段别名也影响结果集字段别名。
    一、查找记录
    1、语法:
    SELECT select_expr [,select expr2...] 只查找某一个函数或表达式
    [
    FROM table_references 查询表名
    [WHERE where_conditon] 查询条件
    [GROUP BY {col_name|position} [ASC|DESC],...] 按某个字段进行分组,相同的只显示第一个
    [HAVING where_conditon] 分组时,给出显示条件
    [ORDER BY {col_name|expr|position} [ASC|DESC],...] 排序
    [LIMIT {[offset,]row_count|row_count OFFSET offset}] 限制返回数量
    }
    2、查询表达式的顺序会影响结果顺序
    每个表达式表示想要的一列,必须有至少一个
    多个列直接以英文逗号分隔
    星号*表示所有列
    3、使用tbl_name.col_name来表示列记录,这多表查询时可以区别开同名的列
    4、使用[AS] alias_name为其赋予别名,别名可以用于GROUP BY、ORDER BY或HAVING子句,例如SELECT id AS userId,username AS uname FROM users; 这样查询出来的结果会用别名表示

    *创建存储过程   *创建视图   *设置表、存储过程和视图的权限

    3:RDBMS

    where 条件表达式
    where 后各种根据条件(>、<、=、>=、<=、!=、<>、IS NOT NULL),根据逻辑(and,or),根据结合方式left join、right join等,根据模式匹配(IN、NOT IN、like、not like、regexp),使用各种MySQL函数和表达式,从表集合中筛选记录。
    条件表达式
    对记录进行过滤, 如果没有指定WHERE子句,则显示所有记录。
    在WHERE表达式中,可以使用MySQL支持的函数或运算符。
    查询结果分组 GROUP BY
    [GROUP BY {col_name|position} [ASC|DESC],...]
    ASC:升序,默认
    DESC:降序
    position:SELECT语句中列的序号
    eg. ELECT sex FROM users GROUP BY sex;对users中的sex按sex进行分组
    eg. SELECT * FROM users GROUP BY 1;(这里的1表示查询的第一个字段,这里查询所有字段信息,第一个字段就是id,所以会按照id字段进行分组) 1表示SELECT语句中第一个出现的字段,即位置。
    建议BY后写列名称,不写位置,因为位置还要人为数。
    注意:如果存在相同的值(例如上面的age可能有多个相同的值),只会保留一个。但使用ORDER BY 就不会省略。
    having 语句分组
    having 语句分组,用在group by后面追加条件,判断式中的字段是必须出现在前面select中的 或者是可以包含没有出现在前面查询中的字段的一个聚合函数count(),max()等等
    [HAVING when where_condition]
    SELECT sex FROM users GROUP BY 1 HAVING age > 35; //有错
    SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;
    SELECT sex FROM users GROUP BY 1 HAVING count(id) >= 2;
    (这条指令,指按照sex分组,分成了两组sex=0和sex=NULL,条件id数大于2的留下显示,显然sex=0个数有8>2故留下,而sex=NULL个数为1,不满足条件,故不显示。如果条件改成count(id)>=1,则会显示sex为0和NULL两个分组。)
    聚合函数永远只有一个返回结果
    count是记录个数的,
    ** HAVING 分组条件 **
    没有 HAVING 时,GROUP BY 是对全体记录进行分组并显示结果。
    有 HAVING 时,对全体记录分组后只把符合HAVING条件的记录显示出来。
    举例:SELECT username,age FROM users GROUP BY age HAVING count(id)>=2;
    这句话的意思是:按照age分组后,把组员数量大于等于2的组显示出来。
    order by对查询结果进行排序
    order by
    对查询结果进行排序,默认是升序
    order by{col_name}
    select * from users order by id desc; //对一个字段排序
    select * from users order by age,id desc; //两个字段同时排序
    desc是降序
    1、对查询结果进行排序:[ORDER BY [col_name | expr | position } [ASC|DESC],...]elect * from user order by id desc;
    2、可以同时按多条字段进行排序,规则是先按前面的字段排,在基础上再按后面字段排。
    3、如:SELECT * FROM users ORDER BY age,id DESC; 先按照age排序,如果age有重复的,重复的字段里按id排序
    LIMIT:限制查询结果返回的数量
    [LIMIT {[offset,] row_count|row_count OFFSET offset}]
    SELECT语句从0开始编号
    offset:偏移量
    row_count:返回结果的数目 [LIMIT{[offset,]row_countrow_count OFFSET offset}]
    eg. SELECT * FROM users LIMIT 2; // 从第一条开始(第一个为0),返回两条
    SELECT * FROM users LIMIT 2,3 ;//从第三条开始(第一个为0),返回三条
    第三种insert,数据从一个表插入到另一个表 将查询结果写入到另一个数据表中:
    INSERT table_name(column_name) SELECT ...
    eg:
    INSERT test SELECT username FROM users WHERE age >=30; // 字段不匹配提示
    INSERT test(username) SELECT username FROM users WHERE age >=30;
    {
    对比分组:
    SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;
    分组用的是HAVING要求HAVING后的条件要么是聚合函数,要么字段在前面出现;
    而插入用的是WHERE 没有以上提到的两个限制
    }
    总结
    记录操作:增,改,删,查
    INSERT://增加记录,有三种方法。
    INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr|DEFAULT},...),(...),...
    INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...
    INSERT [INTO] tbl_name [(col_name,...)] SELECT...
    UPDATE://更新数据
    单表更新
    UPDATE [LOW_PRIORITY][IGNORE] table_reference SET col_name1={expr1|DEFAULT},[col_name2={expr2|DEFAULT}]...[WHERE where_condition]
    多表更新
    DELETE : //删除数据
    单表删除
    DELETE FROM tbl_name [WHERE where_condition}
    多表删除
    SELECT: //查询
    SELECT select_expr [,select expr2...] 只查找某一个函数或表达式
    [
    FROM table_references 查询表名
    [WHERE where_conditon] 查询条件
    [GROUP BY {col_name|position} [ASC|DESC],...] 按某个字段进行分组,相同的只显示第一个
    [HAVING where_conditon] 分组时,给出显示条件
    [ORDER BY {col_name|expr|position} [ASC|DESC],...] 排序
    [LIMIT {[offset,]row_count|row_count OFFSET offset}] 限制返回数量
    ]

    3:RDBMS

    RDBMS是指关系型数据库管理系统

    RDBMS是指关系型数据库管理系统

    RDBMS是SQL的基础,同样也是所有现代数据库系统的基础,如MS SQL Server、IBM DB2、Oracle、MySQL以及Microsoft Access

    RDBMS是SQL的基础,同样也是所有现代数据库系统的基础,如MS SQL Server、IBM DB2、Oracle、MySQL以及Microsoft Access

    RDBMS中的数据存储在被称为表的数据库对象中

    RDBMS中的数据存储在被称为表的数据库对象中

    表是相关的数据项的集合,他由列和行组成。

    表是相关的数据项的集合,他由列和行组成。

    二、SQL语法

    二、SQL语法

    注意:SQL对大小写不明感!!!

    注意:SQL对大小写不明感!!!

    1:SQL语句后面的分号

    1:SQL语句后面的分号

    某些数据库系统要求在每条SQL命令的末端使用分号。

    某些数据库系统要求在每条SQL命令的末端使用分号。

    分号是在数据库系统中分隔每条SQL语句的标准方法,这样就可以在服务器的相同请求中执行一条以上的语句。

    分号是在数据库系统中分隔每条SQL语句的标准方法,这样就可以在服务器的相同请求中执行一条以上的语句。

    如果使用的是MS Access和SQL Server 2000,则不必在每条SQL语句之后使用分号,不过某些数据库要求必须使用分号。

    如果使用的是MS Access和SQL Server 2000,则不必在每条SQL语句之后使用分号,不过某些数据库要求必须使用分号。

    2:SQL DML和DDL

    2:SQL DML和DDL

    可以把SQL分为两个部分:数据操作语言(DML)和数据库定义语言(DDL)

    可以把SQL分为两个部分:数据操作语言(DML)和数据库定义语言(DDL)

    SQL(结构化查询语句)是适用于执行查询的语法。但是SQL语言也包含用于更新、插入和删除记录的语法。SQL的DML部分:select、update、delete、insert into 。 数据库定义语言(DDL)部分使我们有能力创建或删除表格,我们也可以定义索引(键),规定表之间的连接,以及表间的约束:

    SQL(结构化查询语句)适用于执行查询的语法。但是SQL语言也包含用于更新、插入和删除记录的语法。查询和更新构成了SQL的DML部分:select、update、delete、insert into 。 数据库定义语言(DDL)部分使我们有能力创建或删除表格,我们也可以定义索引(键),规定表之间的连接,以及事假表间的约束:

    Create database、alert database、create table、alert table、drop table、create index、drop index

    Create database、alert database、create table、alert table、drop table、create index、drop index

    三、Select

    三、Select

    User表里面的数据如下

    User表里面的数据如下

     图片 2

     图片 3

    查询user表里面的user_name字段和user_age字段的所有数据

    查询user表里面的user_name字段和user_age字段的所有数据

    Select user_name,user_age from user

    Select user_name,user_age from user

     图片 4

     图片 5

    查询user表中所有的字段数据,用 * 表示列的名称

    查询user表中所有的字段数据,用 * 表示列的名称

    Select * from user

    Select * from user

     图片 6

     图片 7

    四、Distinct

    四、Distinct

    Distinct选取所有的值的时候不会出现重复的数据

    Distinct选取所有的值的时候不会出现重复的数据

    用普通的查询,查询所有

    用普通的查询,查询所有

    Select * from user

    Select * from user

     图片 8

     图片 9

    Select distinct user_name,user_age from user

    Select distinct user_name,user_age from user

    注意:不能有user_id,因为两个Mary的user_id不一样,加上就不算相同数据

    注意:不能有user_id,因为两个Mary的user_id不一样,加上就不算相同数据

     图片 10

     图片 11

    五、Where

    五、Where

    1:查询user_id等于1 的数据

    1:查询user_id等于1 的数据

    Select * from user where user_id = 1

    Select * from user where user_id = 1

     图片 12

     图片 13

    2:查询user_age大于等于12的数据

    2:查询user_age大于等于12的数据

    Select * from user where user_age >=12

    Select * from user where user_age >=12

     图片 14

     图片 15

    3:查询user_age不等于12的数据

    3:查询user_age不等于12的数据

    Select * from user where user_age <> 12

    Select * from user where user_age <> 12

     图片 16

     图片 17

    六、ADN 和 OR

    六、ADN 和 OR

    And和or在where子语句中把两个或多个条件结合起来。如果需要两个条件都成立就是用and如果只需要其中一个条件成立就使用or

    And和or在where子语句中把两个或多个条件结合起来。如果需要两个条件都成立就是用and如果只需要其中一个条件成立就使用or

    Select * from user where user_name = 'mary' and user_age = 12

    Select * from user where user_name = 'mary' and user_age = 12

    需要注意的是SQL使用单引号来环绕文本值,如果是数值则不需要引号

    需要注意的是SQL使用单引号来环绕文本值,如果是数值则不需要引号

     图片 18

     图片 19

    Select * from user where user_name='mary' or user_age =13

    Select * from user where user_name='mary' or user_age =13

     图片 20

     图片 21

    结合and和or使用圆括号来组成复杂的表达式

    结合and和or使用圆括号来组成复杂的表达式

    Select * from user where (user_name = 'mary' and user_age = 12) or(user_age =13)

    Select * from user where (user_name = 'mary' and user_age = 12) or(user_age =13)

     图片 22

     图片 23

    七、Order by

    七、Order by

    1:对指定列进行升序排列

    1:对指定列进行升序排列

    Select * from user order by user_name

    Select * from user order by user_name

     图片 24

     图片 25

    2:按照user_id逆序排列

    2:按照user_id逆序排列

    Select * from user order by user_id DESC

    Select * from user order by user_id DESC

     图片 26

     图片 27

    2:按照升序排列user_id逆序排列user_age

    2:按照升序排列user_id逆序排列user_age

    SELECT * FROM user order by user_id ASC,user_age DESC

    SELECT * FROM user order by user_id ASC,user_age DESC

     图片 28

     图片 29

    3:按照升序排列user_id逆序排列user_age

    3:按照升序排列user_id逆序排列user_age

    SELECT * FROM user order by user_age DESC,user_id ASC

    SELECT * FROM user order by user_age DESC,user_id ASC

     图片 30

     图片 31

    注意:前面的条件优先级更高!!

    注意:前面的条件优先级更高!!

    八、Insert

    八、Insert

    User表

    User表

     图片 32

     图片 33

    插入一行数据 user_id为2 user_name为tom,user_age为12

    插入一行数据 user_id为2 user_name为tom,user_age为12

    注意:如果每一项都有插入的话就不需要在前面列出列名!!

    注意:如果每一项都有插入的话就不需要在前面列出列名!!

    Insert into user values(2,'tom',12)

    Insert into user values(2,'tom',12)

    图片 34

    图片 35

    新插入一行数据,只要求user_name为eva

    新插入一行数据,只要求user_name为eva

    Insert into user(user_name) values('eva')

    Insert into user(user_name) values('eva')

    注意:因为ID设置为自增,所以user_id不为null

    注意:因为ID设置为自增,所以user_id不为null

     图片 36

     图片 37

    九、Update

    九、Update

    修改user_id为6的数据user_age为14

    修改user_id为6的数据user_age为14

    Update user set user_age=14 where user_id=6

    Update user set user_age=14 where user_id=6

     图片 38

     图片 39

    修改user_id为1的数据user_name为ann,user_age为11

    修改user_id为1的数据user_name为ann,user_age为11

    Update user set user_name='ann',user_age=11 where user_id=1

    Update user set user_name='ann',user_age=11 where user_id=1

    图片 40

    图片 41

    十、Delete

    十、Delete

    User表中的所有数据信息如下

    User表中的所有数据信息如下

     图片 42

     图片 43

    删除user_age为12的数据

    删除user_age为12的数据

    Delete from user where user_age=12

    Delete from user where user_age=12

     图片 44

     图片 45

    删除表中的所有数据

    删除表中的所有数据

    Delete from user

    Delete from user

     图片 46

     图片 47

    第二章 SQL高级教程

    第二章 SQL高级教程

    一、Top

    一、Top

    Top子句用于返回要返回的记录的数目,但并不是所有的数据库都支持top子句

    Top子句用于返回要返回的记录的数目,但并不是所有的数据库都支持top子句

    1:SQL Server

    1:SQL Server

    Select top 5 * from user

    Select top 5 * from user

    图片 48

    2:MySQL

    2:MySQL

    Select * from user limit 5

    Select * from user limit 5

    3:Oracle

    图片 49

    Select * from user where ROWNUM <= 5

    3:Oracle

    二、Like

    Select * from user where ROWNUM <= 5

    User表的初始数据如下

    二、Like

    图片 50

    User表的初始数据如下

    1:找出以li开头的数据

    图片 51

    Select * from user where user_name like 'li%'

    1:找出以li开头的数据

    图片 52

    Select * from user where user_name like 'li%'

    2:找出以ry结尾的数据

    图片 53

    Select * from user where user_name like '%ry'

    2:找出以ry结尾的数据

     图片 54

    Select * from user where user_name like '%ry'

    3:找出含有a的数据

     图片 55

    Select * from user where user_name like '%a%'

    3:找出含有a的数据

     图片 56

    Select * from user where user_name like '%a%'

    4:找出第二个字母是a第四个字母是y的数据

     图片 57

    Select * from user where user_name like '_a_y'

    4:找出第二个字母是a第四个字母是y的数据

     图片 58

    Select * from user where user_name like '_a_y'

    三、通配符

     图片 59

    在搜索数据库中的数据的时候SQL通配符可以替代一个或多个字符。SQL通配符必须与like运算符一起使用

    三、通配符

    1: _ 替代一个字符

    在搜索数据库中的数据的时候SQL通配符可以替代一个或多个字符。SQL通配符必须与like运算符一起使用

    找出第二个字母是a第四个字母是y的数据

    1: _ 替代一个字符

    Select * from user where user_name like '_a_y'

    找出第二个字母是a第四个字母是y的数据

     图片 60

    Select * from user where user_name like '_a_y'

    2: % 替代一个或多个字符

     图片 61

    找出以ry结尾的数据

    2: % 替代一个或多个字符

    Select * from user where user_name like '%ry'

    找出以ry结尾的数据

     图片 62

    Select * from user where user_name like '%ry'

    3: [] 字符列中的任意一个单字符

     图片 63

    找出以a或者l开头的数据

    3: [] 字符列中的任意一个单字符(在SQL Server里面有作用,在MySQL里面不会报错但找不到值)

    Select * from user where user_name like '[al]%'

    找出以a或者l开头的数据

    找出不是a或者l开头的数据

    Select * from user where user_name like '[al]%'

    Select * from user where user_name like '[!al]%'

    找出不是a或者l开头的数据

    四、In

    Select * from user where user_name like '[^al]%'

    只要数据满足in里面的一个条件就可以了

    四、In

    找到user_age是12或者13的数据

    只要数据满足in里面的一个条件就可以了

    Select * from user where user_age in (12,13)

    找到user_age是12或者13的数据

     图片 64

    Select * from user where user_age in (12,13)

    找到user_name是Harry和Mary的数据

     图片 65

    Select * from user where user_name IN ('mary','harry')

    找到user_name是Harry和Mary的数据

     图片 66

    Select * from user where user_name IN ('mary','harry')

    五、Between

     图片 67

    选取两个值之间的数据

    五、Between

    查询年龄在12和14之间的数据

    选取两个值之间的数据

    Select * from user where user_age between 12 and 14

    查询年龄在12和14之间的数据

     图片 68

    Select * from user where user_age between 12 and 14

    查询字母在Alice和John之间的数据

     图片 69

    Select * from user where user_name between 'alice' AND'john'

    查询字母在Alice和John之间的数据

     图片 70

    Select * from user where user_name between 'alice' AND'john'

    六、Aliases

     图片 71

    指定别名

    六、Aliases

    假设我们有两个表分别是user和Room 。我们分别指定他们为u和r。

    指定别名

    1:不使用别名

    假设我们有两个表分别是user和Room 。我们分别指定他们为u和r。

    Select room.room_name,user.user_name,user.user_age from user ,room  Where user.user_age=12 and room.room_id = 1

    1:不使用别名

     图片 72

    Select room.room_name,user.user_name,user.user_age from user ,room  Where user.user_age=12 and room.room_id = 1

    2:使用别名

     图片 73

    使用别名的时候直接将别名跟在后面,不使用as也可以

    2:使用别名

    Select r.room_name,u.user_name,u.user_age from user as u,room as r  Where u.user_age=12 and r.room_id = 1

    使用别名的时候直接将别名跟在后面,不使用as也可以

     图片 74

    Select r.room_name,u.user_name,u.user_age from user as u,room as r  Where u.user_age=12 and r.room_id = 1

    七、Join

     图片 75

    数据库中的表可以通过键将彼此联系起来,主键是一个列,在这个列中的每一行的值都是唯一的,在表中,每个主键的值都是唯一的,这样就可以在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

    七、Join

    以下为表user和表Room的数据

    数据库中的表可以通过键将彼此联系起来,主键是一个列,在这个列中的每一行的值都是唯一的,在表中,每个主键的值都是唯一的,这样就可以在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

     图片 76    图片 77

    以下为表user和表Room的数据

    1:引用两个表

     图片 78    图片 79

    找出在Room of boy相关联的用户信息

    1:引用两个表

    Select u.user_name,u.user_age,r.room_name from user as u,room as r 

    找出在Room of boy相关联的用户信息

    Where u.room_id = r.room_id and r.room_name='room of boy'

    Select u.user_name,u.user_age,r.room_name from user as u,room as r 

     图片 80

    Where u.room_id = r.room_id and r.room_name='room of boy'

    2:使用关键字join来连接两张表

     图片 81

    Select u.user_name,u.user_age,r.room_name

    2:使用关键字join来连接两张表

    from user as u

    Select u.user_name,u.user_age,r.room_name

    join room as r

    from user as u

    on u.room_id = r.room_id and r.room_name='room of boy'

    join room as r

     图片 82

    on u.room_id = r.room_id and r.room_name='room of boy'

    八、Inner join

     图片 83

    Inner join 与 join 用法一致

    八、Inner join

    Select u.user_name,u.user_age,r.room_name

    Inner join 与 join 用法一致

    from user as u

    Select u.user_name,u.user_age,r.room_name

    inner join room as r

    from user as u

    on u.room_id = r.room_id and r.room_name='room of boy'

    inner join room as r

     图片 84

    on u.room_id = r.room_id and r.room_name='room of boy'

    九、Left join

     图片 85

    注意:左连接以左边的表为主体,也就是说会列出左边的表中的所有的数据,无论它是否满足条件。

    九、Left join

    1:user在左边

    注意:左连接以左边的表为主体,也就是说会列出左边的表中的所有的数据,无论它是否满足条件。

    Select u.user_name,u.user_age,r.room_name

    1:user在左边

    from user as u

    Select u.user_name,u.user_age,r.room_name

    Left join room as r

    from user as u

    on u.room_id = r.room_id and r.room_name='room of boy'

    Left join room as r

     图片 86

    on u.room_id = r.room_id and r.room_name='room of boy'

    2:Room在左边

     图片 87

    Select u.user_name,u.user_age,r.room_name

    2:Room在左边

    From room as r

    Select u.user_name,u.user_age,r.room_name

    Left join user as u

    From room as r

    on u.room_id = r.room_id and r.room_name='room of boy'

    Left join user as u

     图片 88

    on u.room_id = r.room_id and r.room_name='room of boy'

    十、Right join

     图片 89

    注意:左连接以右边的表为主体,也就是说会列出左边的表中的所有的数据,无论它是否满足条件。

    十、Right join

    1:Room在右边

    注意:左连接以右边的表为主体,也就是说会列出左边的表中的所有的数据,无论它是否满足条件。

    Select u.user_name,u.user_age,r.room_name

    1:Room在右边

    from user as u

    Select u.user_name,u.user_age,r.room_name

    Right join room as r

    from user as u

    on u.room_id = r.room_id and r.room_name='room of boy'

    Right join room as r

     图片 90

    on u.room_id = r.room_id and r.room_name='room of boy'

    2:user在右边

     图片 91

    Select u.user_name,u.user_age,r.room_name

    2:user在右边

    from  room as r

    Select u.user_name,u.user_age,r.room_name

    Right join user as u

    from  room as r

    on u.room_id = r.room_id and r.room_name='room of boy'

    Right join user as u

     图片 92

    on u.room_id = r.room_id and r.room_name='room of boy'

    十一、Full join

     图片 93

    1:user在左边

    十一、Full join

    Select * from user Full join room

    1:user在左边

     图片 94

    Select * from user Full join room

    2:Room在左边

     图片 95

    Select * From room full join user

    2:Room在左边

     图片 96

    Select * From room full join user

    注意:SQL错误码1054表示没有找到对应的字段名;错误码1064表示用户输入的SQL语句有语法错误

     图片 97

    十二、Union

    注意:SQL错误码1054表示没有找到对应的字段名;错误码1064表示用户输入的SQL语句有语法错误

    Union操作符用于合并两个或者多个SELECT语句的结果集

    十二、Union

    请注意,UNION内部的select语句必须拥有相同数量的列。列也必须拥有相同的数据类型。同时,每条select语句中的列的顺序必须相同。

    Union操作符用于合并两个或者多个SELECT语句的结果集

    下面是Room表和color表的数据

    请注意,UNION内部的select语句必须拥有相同数量的列。列也必须拥有相同的数据类型。同时,每条select语句中的列的顺序必须相同。

    图片 98     图片 99

    下面是Room表和color表的数据

    Select room_name from room

    图片 100     图片 101

    Union

    Select room_name from room

    Select color_name from color

    Union

     图片 102

    Select color_name from color

    默认的union选取不同的值,如果想要有相同的值出现就使用union all

     图片 103

    Select room_name from room

    默认的union选取不同的值,如果想要有相同的值出现就使用union all

    Union all

    Select room_name from room

    Select color_name from color

    Union all

     图片 104

    Select color_name from color

    十三、Create DB

     图片 105

    创建数据库mysqltest

    十三、Create DB

    Create database mysqltest

    创建数据库mysqltest

     图片 106

    Create database mysqltest

    十四、Create table

     图片 107

    Create table sqltest(

    十四、Create table

    Id int,

    Create table sqltest(

    Name varchar(45),

    Id int,

    Age int,

    Name varchar(45),

    Salary float,

    Age int,

    Time Date,

    Salary float,

    )

    Time Date,

     图片 108 图片 109

    )

    十五、Constraints

     图片 110 图片 111

    SQL约束,用于限制加入表的数据的类型

    十五、Constraints

    常见约束:not noll、unique、primary key、foreign key、check、default

    SQL约束,用于限制加入表的数据的类型

    十六、Not null

    常见约束:not null、unique、primary key、foreign key、check、default

    Not null 约束强制列不接受NULL值。Not null 约束强制字段始终包含值,这意味着,如果不向字段添加值,就无法插入新的字段或者更新记录

    十六、Not null

    用法,在字段后面加上 not null

    Not null 约束,强制列不接受NULL值。Not null 约束强制字段始终包含值,这意味着,如果不向字段添加值,就无法插入新的字段或者更新记录

     图片 112

    用法,在字段后面加上 not null

    十七、Unique

     图片 113

    Unique约束唯一标识数据库中的每一条记录。Primary key约束拥有自动的unique约束。需要注意的是,每个表里面可以拥有多个unique约束,但只能有一个primary key约束

    十七、Unique

    1:MySQL用法,unique(字段名)

    Unique约束,唯一标识数据库中的每一条记录。Primary key约束拥有自动的unique约束。需要注意的是,每个表里面可以拥有多个unique约束,但只能有一个primary key约束

     图片 114

    1:MySQL用法,unique(字段名)

    2:SQL Server 、 Oracle 、 MS Access在字段后面加

     图片 115

     图片 116

    2:SQL Server 、 Oracle 、 MS Access在字段后面加

    3:命名约束使用constraint

     图片 117

     图片 118

    3:命名约束使用constraint

    4:已经创建了表之后需要添加约束

     图片 119

    ALTER TABLE sqltest ADD UNIQUE(Age)

    4:已经创建了表之后需要添加约束

     图片 120

    ALTER TABLE sqltest ADD UNIQUE(Age)

    5:给已经创建了的表添加约束并命名

     图片 121

    ALTER TABLE sqltest ADD constraint unique_name UNIQUE(Age,salary)

    5:给已经创建了的表添加约束并命名

     图片 122

    ALTER TABLE sqltest ADD constraint unique_name UNIQUE(Age,salary)

    6:撤销约束

     图片 123

    MySQL

    6:撤销约束

    在没有给约束命名的情况下(上面的age约束)直接使用字段名就可以了

    MySQL

    ALTER TABLE sqltest DROP INDEX age

    在没有给约束命名的情况下(上面的age约束)直接使用字段名就可以了

    图片 124  删除后   图片 125

    ALTER TABLE sqltest DROP INDEX age

    在约束有名字的情况下,直接使用名字就可以了

    图片 126  删除后   图片 127

    ALTER table sqltest  drop index unique_name

    在约束有名字的情况下,直接使用名字就可以了

    图片 128   删除后  图片 129

    ALTER table sqltest  drop index unique_name

    SQL Server 、 Oracle 、 MS Access

    图片 130   删除后  图片 131

    ALTER table 表名 drop constraint 约束名

    SQL Server 、 Oracle 、 MS Access

     

    ALTER table 表名 drop constraint 约束名

    十八、Primary key

    十八、Primary key

    Primary key约束唯一标识数据库表中的每一条记录,组件必须包含唯一的值。组件列不能包含NULL值。每个表都应该有一个主键,并且每一个表都只能有一个主键

    Primary key约束唯一标识数据库表中的每一条记录,组件必须包含唯一的值。组件列不能包含NULL值。每个表都应该有一个主键,并且每一个表都只能有一个主键

    1:在MySQL中的用法

    1:在MySQL中的用法

     图片 132

     图片 133

    2:在SQL Server 、 Oracle 和MS Access中的用法

    2:在SQL Server 、 Oracle 和MS Access中的用法

     图片 134

     图片 135

    3:为已经创建成功的表创建primary key约束

    3:为已经创建成功的表创建primary key约束

    Alter table sqltest add primary key(id)

    Alter table sqltest add primary key(id)

     图片 136

     图片 137

    4:为已经创建成功的表添加主键约束,以及为多个列定义主键约束

    4:为已经创建成功的表添加主键约束,以及为多个列定义主键约束

    Alter table sqltest add constraint pk_name primary key (id,name)

    Alter table sqltest add constraint pk_name primary key (id,name)

     图片 138

     图片 139

    5:在MySQL中撤销主键

    5:在MySQL中撤销主键

    ALTER  TABLE sqltest DROP PRIMARY KEY

    ALTER  TABLE sqltest DROP PRIMARY KEY

    图片 140   删除后   图片 141

    图片 142   删除后   图片 143

    6:在SQL Server、Oracle、MS Access中撤销主键

    6:在SQL Server、Oracle、MS Access中撤销主键

    Alter table 表名 drop constraint 主键名

    Alter table 表名 drop constraint 主键名

    十九、Foreign key

    十九、Foreign key

    所谓的外键,即一个表的外键指向另一个表的主键

    所谓的外键,即一个表的外键指向另一个表的主键

    User表图片 144

    User表图片 145

    Room表图片 146

    Room表图片 147

    在user表里面room_id列指向Room表里面的id列。Room表里面的id列是主键,user表里面的room_id列是外键。外键约束用于预防破坏表之间的连接动作,外键约束也能防止非法数据插入外键列,因为他必须是他指向的那个表的值之一。

    在user表里面room_id列指向Room表里面的id列。Room表里面的id列是主键,user表里面的room_id列是外键。外键约束用于预防破坏表之间的连接动作,外键约束也能防止非法数据插入外键列,因为他必须是他指向的那个表的值之一。

     图片 148

     图片 149

    二十、Check

    二十、Check

    Check约束用于限制列中的值的范围。如果对单一的列定义check约束,那么改了只允许特定的值。如果对一个表定义check约束,那么此约束会在特定的列中对值进行限制。

    Check约束用于限制列中的值的范围。如果对单一的列定义check约束,那么改了只允许特定的值。如果对一个表定义check约束,那么此约束会在特定的列中对值进行限制。

     图片 150

     图片 151

    为已经创建成功的表添加check约束

    为已经创建成功的表添加check约束

    ALTER TABLE USER ADD CHECK (age>10)

    ALTER TABLE USER ADD CHECK (age>10)

    二十一、Default

    二十一、Default

    Default约束用于向列宗插入默认值。如果没有规定其他值,那么就会将默认值添加到所有的新纪录。

    Default约束用于向列中插入默认值。如果没有规定其他值,那么就会将默认值添加到所有的新纪录。

    用法:

    用法:

     图片 152

     图片 153

    当表已经存在的时候,添加默认值

    当表已经存在的时候,添加默认值

    ALTER TABLE sqltest ALTER NAME SET DEFAULT 'tom'

    ALTER TABLE sqltest ALTER NAME SET DEFAULT 'tom'

     图片 154

     图片 155

    图片 156

    图片 157

    撤销默认值

    撤销默认值

     图片 158

     图片 159

    图片 160

    图片 161

    二十二、Create index

    二十二、Create index

    索引,你可以在表里面创建索引,一边更加快速高效地查询数据。用户无法看见索引,他们只能被用来加速搜索、查询。

    索引,你可以在表里面创建索引,一边更加快速高效地查询数据。用户无法看见索引,他们只能被用来加速搜索、查询。

    注意:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是索引本身也需要更新,因此,理想的做法是仅仅在常常被搜索的列上面创建索引。

    注意:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是索引本身也需要更新,因此,理想的做法是仅仅在常常被搜索的列上面创建索引。

    1:创建一个索引

    1:创建一个索引

    CREATE INDEX index_name ON color (color_id )

    CREATE INDEX index_name ON color (color_id )

     图片 162

     图片 163

    2:创建一个独一无二的索引,即两行不能拥有相同的索引值。

    2:创建一个独一无二的索引,即两行不能拥有相同的索引值。

    CREATE UNIQUE INDEX book_index ON book (book_id)

    CREATE UNIQUE INDEX book_index ON book (book_id)

     图片 164

     图片 165

    3:如果索引不止一个列,你可以在括号中列出这些列的名称,用逗号隔开

    3:如果索引不止一个列,你可以在括号中列出这些列的名称,用逗号隔开

    CREATE INDEX index_bank ON bank (bank_id,bank_name)

    CREATE INDEX index_bank ON bank (bank_id,bank_name)

     图片 166

     图片 167

    二十三、Drop

    二十三、Drop

    通过使用DROP语句,可以删掉索引、表和数据库

    通过使用DROP语句,可以删掉索引、表和数据库

    1:删除索引

    1:删除索引

    Drop index index_name on color

    Drop index index_name on color

     图片 168

     图片 169

    删除之后

    删除之后

     图片 170

     图片 171

    图片 172

    图片 173

    图片 174

    图片 175

    2:删除表

    2:删除表

    DROP TABLE colorcopy

    DROP TABLE colorcopy

    图片 176  删除之后   图片 177

    图片 178  删除之后   图片 179

    3:清空表

    3:清空表

    TRUNCATE TABLE color

    TRUNCATE TABLE color

    图片 180  删除之后  图片 181

    图片 182  删除之后  图片 183

    4:删除数据库

    4:删除数据库

    DROP DATABASE mysqltest

    DROP DATABASE mysqltest

    图片 184 删除之后  图片 185

    图片 186 删除之后  图片 187

    二十四、Alert

    二十四、Alert

     图片 188

     图片 189

    1:添加列

    1:添加列

    Alter table user add salary float

    Alter table user add salary float

     图片 190

     图片 191

    2:删除列

    2:删除列

    Alter table user drop column room_id

    Alter table user drop column room_id

     图片 192

     图片 193

    二十五、Increment

    二十五、Increment

    定义主键自增

    定义主键自增

     图片 194

     图片 195

    二十六、View

    二十六、View

    视图,一种基于SQL语句的结果集可视化表。视图包含行和列,就像一个真实的表。视图中的字段来自一个或多个数据库中的真实的表中的字段,我们可以向视图添加SQL函数、where以及join语句,我们提交数据,然后这些来自某个单一的表。需要注意的是,数据库中的结构和设计不会受到视图的函数、where或join语句的影响

    视图,一种基于SQL语句的结果集可视化表。视图包含行和列,就像一个真实的表。视图中的字段来自一个或多个数据库中的真实的表中的字段,我们可以向视图添加SQL函数、where以及join语句,我们提交数据,然后这些来自某个单一的表。需要注意的是,数据库中的结构和设计不会受到视图的函数、where或join语句的影响

    1:创建一个视图,字段来自user表和Room表

    1:创建一个视图,字段来自user表和Room表

    CREATE VIEW view_test AS

    CREATE VIEW view_test AS

    SELECT user.user_name,user.user_age,room.room_name

    SELECT user.user_name,user.user_age,room.room_name

    FROM USER,room

    FROM USER,room

    WHERE user.user_age>10

    WHERE user.user_age>10

    2:查询视图

    2:查询视图

    Select * from view_test

    Select * from view_test

     图片 196

     图片 197

    3:撤销视图

    3:撤销视图

    DROP VIEW view_test

    DROP VIEW view_test

    二十七、Date

    二十七、Date

     图片 198

     图片 199

    二十八、Nulls

    二十八、Nulls

    默认的,表的列可以存放NULL值。如果表里面的某个列是可选的,那么我们可以在不想改列添加值的情况下插入记录或者更新记录,这意味着该字段以NULL值保存。注意,NULL和0是不等价的,不能进行比较。

    默认的,表的列可以存放NULL值。如果表里面的某个列是可选的,那么我们可以在不想该列添加值的情况下插入记录或者更新记录,这意味着该字段以NULL值保存。注意,NULL和0是不等价的,不能进行比较。

     图片 200

     图片 201

    1:查询NULL值 

    1:查询NULL值 

    select * from user where salary is null

    select * from user where salary is null

     图片 202

     图片 203

    2:查询非NULL值 

    2:查询非NULL值 

    select * from user where salary  is not null

    select * from user where salary  is not null

     图片 204

     图片 205

    二十九、数据类型

    二十九、数据类型

    MySQL主要有三种类型:文本、数字、日期

    MySQL主要有三种类型:文本、数字、日期

     图片 206

     图片 207

    图片 208

    图片 209

    图片 210

    图片 211

    图片 212

    图片 213

    图片 214

    图片 215

    图片 216

    图片 217

    图片 218

    图片 219

    图片 220 

    图片 221 

    三十、服务器 

    三十、服务器 

     图片 222

     图片 223

    第三章 SQL函数

    第三章 SQL函数

    一、SQL functions

    一、SQL functions

    在SQL当中,基本的函数类型和种类有若干种,函数的基本类型是:

    在SQL当中,基本的函数类型和种类有若干种,函数的基本类型是:

    合计函数(Aggregate function)和 Scalar函数

    合计函数(Aggregate function)和 Scalar函数

    Aggregate 函数,函数操作面向一系列的值,并返回一个单一的值。

    Aggregate 函数,函数操作面向一系列的值,并返回一个单一的值。

    Scalar 函数,操作面向某个单一的值,并返回基于输入值的一个单一的值。

    Scalar 函数,操作面向某个单一的值,并返回基于输入值的一个单一的值。

    二、Avg()

    二、Avg()

    求平均年龄

    求平均年龄

    Select avg(user_age) from user

    Select avg(user_age) from user

     图片 224

     图片 225

    求大于平均年龄的用户

    求大于平均年龄的用户

    Select * from user where user_age>(Select avg(user_age) from user)

    Select * from user where user_age>(Select avg(user_age) from user)

     图片 226

     图片 227

    三、Count()

    三、Count()

    返回列的值的数目(不包含NULL)

    返回列的值的数目(不包含NULL)

    注意,可以使用as来给count()取一个别名

    注意,可以使用as来给count()取一个别名

     图片 228

     图片 229

    Select count(user_id) from user

    Select count(user_id) from user

     图片 230

     图片 231

    Select count(salary) from user

    Select count(salary) from user

     图片 232

     图片 233

    返回值不同的有多少

    返回值不同的有多少

    Select count(distinct user_name) from user

    Select count(distinct user_name) from user

     图片 234

     图片 235

    查询所有列

    查询所有列

    Select count(*) from user

    Select count(*) from user

     图片 236

     图片 237

    四、Max()

    四、Max()

    返回最大值,NULL不包括在计算中

    返回最大值,NULL不包括在计算中

     图片 238

     图片 239

    Select max(price) as max_price from commodity

    Select max(price) as max_price from commodity

     图片 240

     图片 241

    五、Min()

    五、Min()

    返回最小值,NULL不包括在计算中

    返回最小值,NULL不包括在计算中

     图片 242

     图片 243

    Select min(salary) poor_man from user

    Select min(salary) poor_man from user

     图片 244

     图片 245

    六、Sum()

    六、Sum()

    返回该列值的总额

    返回该列值的总额

     图片 246

     图片 247

    Select sum(salary) from user

    Select sum(salary) from user

     图片 248

     图片 249

    七、Group By 

    七、Group By 

    用于结合合计函数,根据一个或多个列对结果集进行分组

    用于结合合计函数,根据一个或多个列对结果集进行分组

     图片 250

     图片 251

    SELECT cname,SUM(price) FROM commodity GROUP BY cname

    SELECT cname,SUM(price) FROM commodity GROUP BY cname

     图片 252

     图片 253

    八、Having

    八、Having

    在SQL中增加having子句的原因是where不能与合计函数一起使用。用法和where 一样

    在SQL中增加having子句的原因是where不能与合计函数一起使用。用法和where 一样

    SELECT cname,SUM(price) FROM commodity

    SELECT cname,SUM(price) FROM commodity

    GROUP BY cname

    GROUP BY cname

    HAVING  SUM(price)>20

    HAVING  SUM(price)>20

     图片 254

     图片 255

    九、Ucase()

    九、Ucase()

    把函数字段的值转化为大写

    把函数字段的值转化为大写

     图片 256

     图片 257

    SELECT UCASE(user_name) FROM user

    SELECT UCASE(user_name) FROM user

     图片 258

     图片 259

    十、Lcase()

    十、Lcase()

    将函数字段转化为小写

    将函数字段转化为小写

     图片 260

     图片 261

    Select lcase(user_name) from user

    Select lcase(user_name) from user

     图片 262

     图片 263

    十一、Mid()

    十一、Mid()

    从文本字段中提取字符

    从文本字段中提取字符

     图片 264

     图片 265

    Select mid(user_name,2,2) from user

    Select mid(user_name,2,2) from user

     图片 266

     图片 267

    十二、Round()

    十二、Round()

    Round函数把数值字段舍入为指定的小数位数

    Round函数把数值字段舍入为指定的小数位数

     图片 268

     图片 269

    Select round(salary,2) from user

    Select round(salary,2) from user

     图片 270

     图片 271

    十三、Now()

    十三、Now()

    返回当前时间

    返回当前时间

    SELECT NOW() FROM user

    SELECT NOW() FROM user

     图片 272

     图片 273

     

     

    学习完了之后我们可以进入位w3chool的‘SQL测试’进行测试 

    学习完了之后我们可以进入位w3chool的‘SQL测试’进行测试 

     ( ^_^ )/~~拜拜

     ( ^_^ )/~~拜拜

     

    本文由新葡亰496net发布于网络数据库,转载请注明出处:MySQL数据类型与操作数据表,SQL学习笔记1

    关键词: