标签:选择 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