码迷,mamicode.com
首页 > 数据库 > 详细

数据库管理系统

时间:2018-07-23 19:55:52      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:选择   select查询   类型   spec   mat   collate   arc   特定   基础   

数据库结构:

        层次模型

        网状模型

        关系模型

关系模型,是我们最常用的数据库管理系统类型;他的主要组成部分是表(表:由记录(行),和字段(列)组成)

关系型数据管理系统:

    范式:是关系模式的集合,构造关系数据库需要遵守一定的规则,而这些规则就是范式

        目前数据库有六种范式:第一范式,第二范式,第三范式,巴德斯科范式(BCNF),第四范式,第五范式;

        满足最低要求的范式是第一范式,在第一范式的基础上再满足一些要求形成第二范式,以此类推,因此,范式等级越高越难实现数据存储;

    表(二维表):包括行和列,一个表可以没有行(记录),但必须有一个列(字段)

数据库:

    数据库包括的内容:表,索引,视图(虚表),SQL_interface,存储过程,存储函数,触发器,事件调度器;

约束:(约束的是字段(列))
        主键约束:数据唯一不能为空;一个表中只能有一个主键
        唯一键约束:数据唯一,可以为空,唯一键可以有多个也可以没有;
        外键约束:引用性约束或参考性约束;即:如果某表中频繁出现冗余信息,应该将此类信息存储于其他的表中,而此表中该字段的数据为另一张表的主键中所包含的值;
        检查性约束:表达式约束;

MySQL 和 MariaDB

    客户端/服务器架构

    客户端程序:mysql、mysqladmin、mysqldump.......

    服务器端程序:msyqld_safe、msyqld、mysqld_multi

    MySQL的安装:在CentOS Base源下有rpm包,也可以去官方下载二进制包或者源代码包;

    MySQL的配置文件:/etc/my.cnf     /etc/my.cnf.d     ~/.my.cnf

                通常在启动服务时按照如上的顺序去读取配置文件里面的参数,若配置文件内有相同的参数,则以最后的为准;

                也可以使用mysqld_safe服务器端程序启动服务,-c  + 文件,或-e +文件 使用指定的文件内的参数,-c 和 -e 一定要放在首位;-c 是只读指定文件内参数,而-e则是把指定文件附加到最后用来读取参数

mysql命令:

    选项:

        -u :指定用户

        -h:指定主机

        -p:指定密码

        -P:指定端口号

        -D:指定使用哪个数据库

[root@bogon ~]# mysql -p111111 -D wang4 -e 'create table wang2(ID char primary key);'
MariaDB [wang4]> show tables;
+-----------------+
| Tables_in_wang4 |
+-----------------+
| wang2           |
+-----------------+

    

    mysql下的交互式命令(可以使用\?)查看:

        \c,clear :停止当前输入的命令,返回提示符

MariaDB [mysql]> select User from user;
+------------+
| User       |
+------------+
MariaDB [mysql]> select User from user \c
MariaDB [mysql]>

        \d,delimiter:设置语句的结束标记,默认是;

MariaDB [mysql]> \d .
MariaDB [mysql]> select User from user.
+------------+
| User       |
+------------+

        \G,ego :让返回的结果纵向显示

MariaDB [mysql]> select User from user\G
*************************** 1. row ***************************
User: root

        \g,go:不需要输入结束标记,直接送到mysql服务器

        \q,quit、exit:退出mysql交互模式

        \s,status:获取mysql的状态信息

        \u,use:使用指定的数据库

MariaDB [mysql]> use hellodb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [hellodb]>

        \.,source:在mysql交互模式执行SQL脚本文件,

        \?,help:寻找命令帮助

mysqladmin:客户端命令

        选项:-u, -h, -p, -P, -D,  和mysql命令一样

          常用子命令:
                    create db_name:创建数据库;

[root@bogon ~]# mysqladmin -p111111 create db1;

                    drop db_name:删除数据库;

[root@bogon ~]# mysqladmin -p111111 drop db1;
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'db1' database [y/N] y
Database "db1" dropped

                    flush-hosts:清除服务器缓存中所有信息;
                    flush-logs:清除日志,让日志滚动;
                    flush-privileges:刷新授权表;
                    flush-tables:为表加锁;
                    password new-password:为指定的用户设置新密码;
                    start-slave:在msyql的集群服务中的从节点启动用于实施复制功能的线程;
                    stop-slave:在msyql的集群服务中的从节点关闭用于实施复制功能的线程;
                    shutdown:停止服务;

mysqld_safe服务器端命令:用于启动mysql服务,定义mysql的工作特性;

           这里定义工作特性是指定参数;

            指定参数可以在mysql交互式命令里面使用如下方法查看

    show [global | session] variables like '参数名称'  (参数名称可以支持mysql的通配符) ,若不写global或session默认是global

或者

    select  @@[global|session].'参数名称'若不写global或session默认是global

MariaDB [(none)]> show variables like '%file' 
    -> ;
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| ft_stopword_file        | (built-in)      
MariaDB [(none)]> select @@ft_stopword_file
    -> ;
+--------------------+
| @@ft_stopword_file |
+--------------------+
| (built-in)         |
+--------------------+

 查看与状态及统计信息相关的参数/变量的值;
      show [global | session] status like '参数名称'  (参数名称可以支持mysql的通配符) ,若不写global或session默认是global

 修改服务器变量的方法:

    set '参数名称' = 参数值

    set @@参数名称 = 参数值


        set global innodb_file_per_table=1;
        set @@global.innodb_file_per_table=0;

MariaDB与MySQL模式

    ANSI:宽松模式,当插入的数据不符合类型,或长度不匹配,则会发出warning警告

    TRADITIONAL:严格模式。对于插入的数据进行校验,如果该数据不符合字段定义的数据类型或长度要求,报告Error错误警告,且错误数据不会被写入;

        该模式用于事务时,此前可能已经进行了一系列的数据插入和修改操作,而一旦发送上述错误,此前所有的INSERT/UPDATE等操作均会被立即放弃并回滚。

        该模式用于非事务时,一旦发送上述错误,则此前所有的INSERT/UPDATE等操作均不会回滚

(事务:包括事务开始条件和事务结束条件;一般包含一个或多个SQL语句)

    STRICT_TRANS_TABLES:严格模式。对于插入的数据进行校验,如果该数据不符合字段定义的数据类型或长度要求,报告Error错误警告,且错误数据不会被写入;

    STRICT_ALL_TABLES:严格模式。对于事务型操作,与STRICT_TRANS_TABLES模式效果一样;对于非事务操作,与TRADITIONAL模式效果一样。    


数据库的数据类型:

       数值型:
                            精确数值型:
                                TINYINT(3):8bits,0~255,-128~+127
                                SMALLINT(5):16bits,0~65535,-32768~+32767
                                MEDIUMINT(8):24bits,0~16777735
                                INT(10):32bits,
                                INTEGER:48bits,
                                BIGINT:64bits

                            近似数值型:
                                REAL
                                DOUBLE
                                FLOAT

                        字符串型:
                            变长字符型:
                                VARCHAR(length):字符不区分大小写;65536个字符;
                                    VARCHAR(30)
                                        qhdlink$ -- 8字节存储空间;
                                VARBINARY(length):字符区分大小写;65536个字符;

                            定长字符型
                                CHAR(length):字符不区分大小写;256个字符;
                                    CHAR(30)
                                        qhdlink -- 30字节空间;
                                BINARY(length):字符区分大小写;256个字符;

                        对象存储类型:
                            TEXT:存储大量的纯文本信息;
                                TINYTEXT
                                TEXT
                                MEDIUMTEXT
                                LONGTEXT

                            BLOB:存储非纯文本信息经过流式化处理之后的二进制数据;
                                TINYBLOB
                                BLOB
                                MEDIUMBLOB
                                LONGBLOB

                        日期时间型:
                            DATE:日期型,3字节;
                            TIME:时间型,3字节;
                            TIMESTAMP:时间戳类型,4字节;
                            DATETIME:日期时间型,8字节;
                            YEAR:年份,YEAR(2),YEAR(4)

                        内置特殊类型:
                            集合类型:
                                SET:集合,插入的数据可以是集合中各个元素的任意组合;
                                    SET('a','b','c','d')
                                        a
                                        aa
                                        aab
                                        abdc

                            枚举类型:
                                ENUM:枚举,只能存放列举出来的固定的字符或字符串;
                                    ENUM('F','M')
                                        F
                                        M

                    数据类型相关的修饰符:
                        与整数类型相关的:
                            UNSIGNED,无符号整数;
                                注意:UNSIGNED修饰符必须紧跟在精确数值类型标识符之后;
                            AUTO_INCREMENT [=] Value:
                                整型数据的递增或递减;

                        通用修饰符:
                            NOT NULL:非空约束;一般是为主键做约束;
                            DEFAULT Value:为字段设置默认值;

数据库语言

    DDL:数据库定义语言

           创建数据库:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] [CHARACTER SET [=] charset_name  | [DEFAULT] COLLATE [=] collation_name]

                IF NOT EXISTS:
                    如果指定要创建的数据库已经存在,则不报错也不执行创建操作;

                db_name:
                    要创建的数据库的名称

                CHARACTER SET [=] charset_name:

                    查看mysql服务器所支持的所有字符集及默认排序规则;

                COLLATE [=] collation_name:
                    为新创建的数据库指定字符集的排序规则;

MariaDB [(none)]> create database lilei character set = 'utf8';
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> create database if not exists lilei character set = 'utf8';
Query OK, 1 row affected, 1 warning (0.00 sec)

            修改数据库的字符集或排序规则:ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] [CHARACTER SET [=] charset_name  | [DEFAULT] COLLATE [=] collation_name]

注意:如果数据库中已经有表,且表中已经插入数据时,更改数据库的字符集和排序规则可能会导致已存数据的乱码;

            删除数据库:DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

MariaDB [(none)]> drop database lilei;
Query OK, 0 rows affected (0.01 sec)

创建表:

    CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options]

MariaDB [lilei]> create table han×××1(ID tinyint unsigned not null auto_increment primary key,Name varchar(30));
Query OK, 0 rows affected (0.03 sec)

显示表的结构:
                mysql> desc stu_info;

显示创建表的SQL语句:
                mysql> show create table stu_info;

删除表:
            DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

        修改表:修改表的各个字段的属性和定义的内容;
            ALTER TABLE tbl_name [alter_specification [, alter_specification] ...]

            增加表的字段:
                ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]

MariaDB [lilei]> alter table han××× add (Age tinyint not null);
Query OK, 0 rows affected (0.04 sec)               
Records: 0  Duplicates: 0  Warnings: 0


MariaDB [lilei]> alter table han××× add SAge tinyint not null after Age;
Query OK, 0 rows affected (0.04 sec)               
Records: 0  Duplicates: 0  Warnings: 0

            修改表的字段属性
                CHANGE [COLUMN] old_col_name new_col_name column_definition  [FIRST|AFTER col_name]
                MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]

modify和change不同的是 modify不能修改字段名称;

MariaDB [lilei]> alter table han××× change SAge sex tinyint not null after Age;
Query OK, 0 rows affected (0.03 sec)               
Records: 0  Duplicates: 0  Warnings: 0

            删除表的字段:
                DROP [COLUMN] col_name
                
                注意:删除字段的操作可能会引起数据的变化,所以,删除字段时要慎重;

DML:数据库管理语言

    向表中添加数据:
            INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
        Or:
            INSERT [INTO] tbl_name SET col_name={expr | DEFAULT}, ...

MariaDB [lilei]> insert into han××× values(2,'wang',1,2);
MariaDB [lilei]> insert into han××× (Name) values ('zhao'),('yuan');
MariaDB [lilei]> insert into han××× set ID=6,Name='yuan';


            注意:
                1.如果向表中插入的value是字符串,则value必须使用引号引用;
                2.如果向表中插入的value是数字,则value一定不能用引号引用;

        查看表中的数据内容:
            SELECT select_expr [, select_expr ...] [FROM table_references] [WHERE where_condition]

            1.显示整张表:
                SELECT * FROM tbl_name;

            2.投影:显示指定的或符合要求的列;
                SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name;

            3.选择:显示符合要求或匹配条件的行;
                SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition;

                WHERE子句用于指明选择时依据的条件:
                    col_name 操作符 value

MariaDB [lilei]> select ID from han××× where ID=6;
+----+
| ID |
+----+
|  6 |
+----+

            WHERE条件子句:
                通过指明特定的过滤条件或表达式来实现"选择"运算;过滤条件有下列几种:
                    1.算术表达式:Age+10,
                        算术操作符:+, -, *, /, %;
                    2.比较表达式:Age+10<20;
                        比较操作符:=, <=>, <>, !=, >, >=, <, <=;
                    3.逻辑表达式:
                        逻辑操作符:AND, OR, NOT, XOR;
                    4.其他表达式:
                        空值判断:IS NULL, IS NOT NULL;
                        连续区间判断:BETWEEN ... AND ...

MariaDB [lilei]> select * from han××× where ID between 3 and 5;
+----+------+-----+-----+
| ID | Name | Age | sex |
+----+------+-----+-----+
|  3 | li   |   0 |   0 |
|  4 | zhao |   0 |   0 |
|  5 | yuan |   0 |   0 |
+----+------+-----+-----+

                        列表从属关系判断:IN (LIST);
                        模糊值判断:
                            LIKE:可以支持通配符,%和_;如果想要使用索引实现加速检索,则最左侧字符不能使用通配符;
                            RLIKE或REGEXP:可以支持正则表达式元字符;只要在查询条件中包含正则表达式元字符,则一定无法使用索引进行检索;功能很强大,但检索性能可能变差;

            GROUP BY子句:
                根据指定的字段将查询结果进行分组归类,以方便进行聚合运算;
                常用的聚合运算函数:
                    avg():取平均值运算;
                    max():取最大值运算;
                    min():取最小值运算;
                    sum():做和运算;
                    count():做次数统计;

MariaDB [lilei]> select Name,count(Name) from han××× group by Name;
+------+-------------+
| Name | count(Name) |
+------+-------------+
| 10   |           1 |
| li   |           1 |
| wang |           1 |
| yuan |           2 |
| zhao |           1 |
+------+-------------+

(若同时使用GROUP BY 和where) where 放在group by之前
            HAVING子句:对于经过分组归类并进行了聚合运算以后的结果进行条件过滤;
                其条件表达式的书写格式与WHERE子句相同;

            ORDER BY子句:根据指定的字段将查询结果进行排序,可以使用升序或降序,默认是升序;
                升序:ASC
                降序:DESC

LIMIT子句:
                对于查询的结果进行限定行数的输出;

                1.LIMIT [offset,] row_count    offset是一个数:偏移量    row_count :是一个数,显示几行

MariaDB [lilei]> select * from han××× limit 1,2;   偏移一行,显示俩行,也就是从首行开始,略过一行,显示接下来俩行
+----+------+-----+-----+
| ID | Name | Age | sex |
+----+------+-----+-----+
|  2 | wang |   1 |   2 |
|  3 | li   |   0 |   0 |
+----+------+-----+-----+

                2.LIMIT row_count OFFSET offset

MariaDB [lilei]> select * from han××× limit 2 offset 1;
+----+------+-----+-----+
| ID | Name | Age | sex |
+----+------+-----+-----+
|  2 | wang |   1 |   2 |
|  3 | li   |   0 |   0 |
+----+------+-----+-----+

视图: 实际上是一个虚表,使用select查询语句的结果    

    创建视图:CREATE VIEW view_name [(column_list)] AS SELECT clause;

MariaDB [lilei]> create view han as select ID,Name from han×××;
Query OK, 0 rows affected (0.00 sec)

MariaDB [lilei]> select * from han;
+----+------+
| ID | Name |
+----+------+
|  1 | 10   |
|  2 | wang |
|  3 | li   |
|  4 | zhao |
|  5 | yuan |
|  6 | yuan |
+----+------+

    删除视图:DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]


注意:之所以创建视图,是为了隐藏某些字段的信息,所以我们查询视图的时候 显示的只是基表的一部分,当我们去给视图内添加数据时,若基表没显示的字段部分要求数据不能为空,则添加失败,   除非数据库模式为宽松模式;


    


数据库管理系统

标签:选择   select查询   类型   spec   mat   collate   arc   特定   基础   

原文地址:http://blog.51cto.com/wangchaode/2149165

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!