zoukankan      html  css  js  c++  java
  • 数据库基础知识学习

    SQL:结构化查询语言,主要由四个部分组成:

    数据定义语言(DDL):主要用于定义数据库、表等,其中包括CREATE,ALTER,DROP.

    数据操作语言(DML):主要用于对数据库进行添加、修改和删除操作,包括INSERT、UPDATE、DELETE

    数据查询语言(DQL):主要用于查询数据,也就是SELETE

    数据控制语言(DCL):主要用于控制用户的访问权限,其中包括:

    1. GRANT:给用户增加权限
    2. REVOKE语句用于收回用户的权限
    3. COMMIT语句用于提交事务,ROLLBACK语句用于回滚事务

    常用数据库:

    1. Oracle
    2. Mysql
    3. SQL Server
    4. DB2
    5. MongoDB

    在DOS下,Mysql登入语句:

    mysql -h localhost -u root -p

     

    创建数据库的语法格式:

    CREATE DATABASE 数据库名

     

    修改数据库编码的基本语法格式:

    ALTER DATABASE 数据库名 DEFAULT Character set 编码方式 collate 编码方式_bin

     

    删除数据库:

    DROP DATABASE 数据库名

    数据类型:

    1、整数类型

    tinyInt(1字节)    、smallInt(2字节)、  mediumInt(3字节)  、Int(4字节)  、bigInt(8字节)

    2、浮点数类型和定点数类型

    float(4字节)  、double(8字节) 

    decimal(m,d)(m+2字节):M:数据长度,D:小数点后的长度

    3、日期与时间类型

    YEAR 、DATE  、 TIME  、 DATETIME  、  TIMESTAMP

    注:如果插入数值不合法,系统会自动插入0值

    4、字符串和二进制类型(存字符串、图片、声音等)

    char             binary

    varchar  varbinary

    Bolb:用于表示二进制大数据

    TEXT:用于表示大文本数据

    ENUM:枚举类型

    SET:字符串对象,有0或多个值

    BIT:表示位字段类型

    注:char(4)类型,不管插入值的长度多少,始终占四个字节,而varchar(4):占(实际长度+1)字节

     

     

    查看数据表/数据库:

    show create table/database 表名/数据库名

    使用DESCRIBE语句可以查看表的字段信息

    语句:DESCRIBE  表名 或者 DESC 表名

    修改表名:ALTER TABLE 旧表名  RENAME [TO] 新表名;

    修改字段名:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型

    修改字段的数据类型:ALTER TABLE 表名 MODIFY 字段名 数据类型

    添加字段:ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件]  [FIRST|AFTER 已存在字段名]

    删除字段:ALTER TABLE 表名 DROP 字段名

    修改字段的排列位置:ALTER TABLE 表名 MODIFY 字段1 数据类型 FIRST|AFTER 字段2

    删除表:DROP TABLE 表名

     

    表的约束有:

    1、PRIMARY KEY :主键 2、FOREIGN KEY :外键  3、NOT NULL :非空  4、UNIQUE :唯一  5、DEFAULT:默认值约束

    索引:

    普通索引:由KEY 或 INDEX 定义

    唯一性索引:由UNIQUE定义

    全文索引:由FULLTEXT定义,只能创建在CHAR、VARCHAR或TEXT类型的字段上,而且只有MgISAM存储引擎支持

    单列索引:在表中单个字段上创建索引

    多列索引:在表中多个字段上创建索引,只有查询条件中使用了这些字段中的第一个字段,该索引才会被使用

    空间索引:由Spatial定义,它只能创建在空间数据类型的字段上

    注:索引提高数据查询速度,但会占用一定的磁盘空间

    创建表的时候创建索引语句:

    CREATE TABLE 表名(字段名 数据类型

              [unique|fulltext|spatial]  index|key

              [别名](字段名[(长度)])[ASC|DESC]  

              )

    查看索引是否被使用,可以使用Explain

    语句:Explain select * from 表名 where 字段=值  G

    使用CREATE INDEX 语句在已经存在的表上建索引

    语句:CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX  索引名  ON 表名(字段名[(长度)])[ASC|DESC]

    使用ALTER TABLE 在已存在的表上建索引

    语句:ALTER TABLE 表名 ADD [unique|fulltext|spatial]  index 索引名(字段名[(长度)])[ASC|DESC]

    删除索引:

    ALTER TABLE 表名 DROP INDEX 索引名

    DROP INDEX 索引名 ON  表名

    注:索引建立后,当检索时会自动判断有无可用索引

    插入语句:

    INSERT INTO 表名(字段1,字段2,.....) VALUES(值1,值2......)

    INSERT INTO 表名 VALUES (值1,值2......)

    可以为表中指定的字段或者全部字段添加数据:INSERT INTO 表名 SET 字段1=值1[,字段2=值2,......]

     

    更新数据:

    UPDATE 表名 SET 字段1=值1[,字段2=值2,......] [where条件表达式]

     

    删除数据:

    DELETE FROM 表名[where条件表达式]

    TRUNCATE [TABLE] 表名

    二者的区别:

    1、DELETE 语句是DML语言,而TRUNCATE是DDL语言

    2、DELETE 后可以跟WHERE子句,而TRUNCATE只能删除表中的所有记录

    3、使用TRUNCATE语句删除表中数据后,再次添加记录时,自动增加字段的默认初始值重新由1开始,而DELETE为删除时该字段的最大值加1

    4、使用DELETE语句,每删除一条记录都会在日志中记录,而TRUNCATE不会在日志中记录删除的内容,因此TRUNCATE的执行效率更高

      (因为DELETE语句删除会有记录,所以在事务中可以使用回滚来恢复数据)

    查询语句:

    SELETE [DISTINCT] *|{字段1,字段2,......} FROM 表名

                  [WHERE条件表达式]

                  [Group by 字段名[having条件表达式]]

                  [Order by 字段名[ASC|DESC]]

                  [LIMIT [OFFSET]记录数]

    注:使用*星号,会因为获取的数据过多而降低查询的效率,WHERE条件表达式中的关系运算符:<>和!=效果一样,都表示不等于

    带IN关键字的查询:

    SELECT * |{字段1,字段2,...} from 表名  where 字段名 [NOT]  IN (元素1,元素2,......)

     

    带BETWEEN AND 关键字的查询:

    SELECT * |{字段1,字段2,,..} from 表名 where 字段名 [NOT] BETWEEN 值1  AND 值2

     

    空值查询:

    SELECT * |{字段1,字段2,...} from 表名  where字段名 IS [NOT] NULL

     

    DISTINCT:

    SELECT DISTINCT 字段1,字段2....  from 表名

    注:当DISTINCT作用于多字段,必须这些字段都相同,才会被认作是重复记录

     

    带LIKE关键字的查询

    SELECT * |{字段1,字段2,...} from 表名  where字段名[]NOTLIKE  '匹配字符串'

    匹配字符串可以是普通字符串,也可以是包含百分号和下划线

    百分号通配符:可以匹配任意长度的字符串

    下划线通配符:只匹配单个字符,匹配多个字符要多个下划线通配符

    注:下划线之间不能有空格,否则就如以下例子所示:M_ _QL只能匹配MY SQL不能匹配MYSQL

    如果要匹配字符串中的百分号和下划线,就需要转义

     

    AND  、OR关键字查询:

    AND:同时满足多个条件

    OR:满足一个即可

    注:AND的优先级高于OR

     

    聚合函数:

    COUNT():返回某列的行数

    语法格式:SELECT COUNT(*) FROM 表名

    SUM:返回某列值的和

    语法格式:SELECT SUM(字段名) FROM 表名

    AVG():返回某列的平均值

    语法格式:SELECT AVG(字段名) FROM 表名

    MAX():返回某列的最大值

    语法格式:SELECT MAX(字段名) FROM 表名

    MIN():返回某列的最小值

    语法格式:SELECT MIN(字段名) FROM 表名

    对查询结果排序

    order by 字段1[ASC|DESC] ,字段2[ASC|DESC]....

    默认是ASC升序

    排序先按字段1排序,然后再对字段1排序好的相同的值再进行字段2的排序,以此类推

    注:字段值为NULL的可以被认为是最小值

    分组查询:Group by

    单独使用Group by 分组,查询的是每个分组中的一条记录,所以一般与聚合函数一起使用

    例如:Select count(*),gender from student group by gender;

    where与having作用相同:区别在于having后可以跟聚合函数,而where不能

    Limit限制查询结果的数量:可以实现分页

    语法格式:LIMIT [OFFSET,]记录数

    为表取别名:

    select * from 表名 [as] 别名

    为字段取别名:select 字段1[as]别名[,字段2 [as] 别名,......] from 表名  

    这样查询结果显示的就是别名

    外键

    定义:指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束

    为表添加外键约束:

    alter table 表名 add constraint FK_ID foreign key(外键字段名)  references 外表表名(主键字段名)

    constraint:约束        FK_ID:外键约束名

    删除外键约束:

    alter table 表名 drop foreign key 外键名

    注:但外键还在,可以直接alter table 表名 add foreign key(外键字段名) references 外表名(主键字段名)的方式重新建立与另一个表的外键约束

    操作带有外键的表:

    在两个具有关联关系的表中删除数据时,一定要先删除从表中的数据,然后再删除主表中的数据,否则会报错,

    即:不能直接删除带有从表参照物的外键字段,如果外键字段不是非空,可以通过先将他们置空,再删除

    例如:

    GID是STUDENT的外键,GRADE主键id的参照物,不能直接DELETE FROM STUDENT WHERE GID =1的方式删除记录;

    可以通过其他字段删除,where name = '小';或者先将ID置为NULL

    连接查询:

    1、交叉连接

    语法格式:select * from 表1 cross join 表2

    查询两个表中所有数据组合,eg:表1有四条记录,表2也有四条记录,那么显示结果就是16条记录

    2、内连接(简单连接或自然连接)

    语法格式:Select 查询字段 from 表1 [inner] join 表2 on 表1.字段=表2.字段

    在Mysql中,可以用where条件语句来实现同样的功能,select 查询语句 from 表1,表2 where 表1.字段=表2.字段

    区别:inner join 语句后不可以直接添加其他条件,而where 可以

     

    3、外连接

    语法格式:select 所查字段 from 表1 left|right [outer] join 表2 on 表1.字段=表2.字段 [where条件表达式]

    左右连接功能正好相反

    注:如果左表的某条记录在右表中不存在,则在右表中显示为空(左连接)

    子查询:

    1、IN:返回一个数据列

    2、EXISTS:返回true或false

    3、any:只要满足内层子查询中的任意一个比较条件,就返回一个结果作为外层查询条件

    4、all:需要满足所有内层查询条件

  • 相关阅读:
    微信小程序实现运动步数排行(可删除)
    微信小程序实现运动步数排行(可删除)
    一个文艺的在线生成漂亮的二维码工具网站
    微信小程序常见的UI框架/组件库总结
    天天快车是款精细的游戏
    MHA的几种死法-叶良辰
    编译maxscale
    mydbtest文档
    高山仰止
    docker居然需要3.10以上的内核
  • 原文地址:https://www.cnblogs.com/shigeng/p/8597106.html
Copyright © 2011-2022 走看看