当前位置:Gxlcms > 数据库问题 > MySQL(二)

MySQL(二)

时间:2021-07-01 10:21:17 帮助过:2人阅读

  • [mysqld]:mysql客户端服务器配置段 

  • [client]:mysql的所有客户端,包括其他的客户端

  • 2、mysql命令常用选项

    • 交互式模式:

          -u –user    指定用户名,例如:-u root,-uroot,–user=root

          -h –host    指定主机名称,例如:-h localhost,-hlocalhost,–host=localhost

          -p –password  指定密码

          –port       //当–protocol=tcp时指定使用的端口号

          –socket     //相当于–protocol=socket

          -e    在shell命令行模式下执行mysql客户端命令,而后退出。

    使用举例:

    [root@example.com data]# mysql -uroot -h127.0.0.1 -predhat -e ‘SHOW DATABASES;‘
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+

       注意:命令是先登录到mysql服务器然后执行查询命令,显示当前mysql服务器上的数据库信息,此处-e后面跟的参数必须用单引号或双引号引起来,否则不生效。若要在shell命令行执行多个关于mysql的命令,可以写个脚本来进行执行。

    • 批处理模式:

    [root@example.com ~]# cat test.sql 
    use mysql;SELECT User,Host,Password FROM user;
    [root@example.com ~]# mysql -uroot -hlocalhost -predhat < test.sql
    User	Host	Password
    root	localhost	*84BB5DF4823DA319BBF86C99624479A198E6EEE9
    root	127.0.0.1	*84BB5DF4823DA319BBF86C99624479A198E6EEE9

     

    3、命令行编辑功能

             Ctrl+a //快速移动光标至行首

             Ctrl+e //快速移动光标至行尾

             Ctrl+w //删除光标之前的单词

             Ctrl+u //删除行首至光标处的所有内容

             Ctrl+y //粘贴使用Ctrl+w或Ctrl+u删除的内容

    4、mysql的命令 

    • 常用客户端命令及特点  

       首先,在客户端可以自动执行的命令,不需要语句终止符。关于客户端命令可以在基于mysql的交互式接口中键入help或者?,均能得到客户端的命令,下面就列举写常用的客户端命令。

        quit    (\q)退出 交互式命令行;

        ?          (\?)  获取帮助 ;

        go       (\g) 直接将命令送到服务器端执行 ;

        ego     (\G) 不再显示为表格显示,而是以列的方式显示 ;

        clear    (\c) 取消命令的执行

        status  (\s) 查询运行状态 

        use      (\u) 设定默认库

    • 服务器端命令 

      服务端命令比较多,比如DDL、DCL、DML基本上都属于服务端命令,虽然在mysql中命令不区分大小写,但是一般为区分还是会在使用服务端命令时使用大写字母表示,同时在语句的最后需要语句终止符,通常默认为分号(;),若被别人修改可以直接在语句最后用\g。

    SELECT命令使用举例:

    mysql> SELECT current_time();    //执行mysql内建的函数。
    +----------------+
    | current_time() |
    +----------------+
    | 22:33:07       |
    +----------------+
    1 row in set (0.13 sec)
    mysql> SELECT User,Host,Password FROM user;     //从表中挑选指定的列的数据
    +------+-----------+-------------------------------------------+
    | User | Host      | Password                                  |
    +------+-----------+-------------------------------------------+
    | root | localhost | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
    | root | 127.0.0.1 | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
    +------+-----------+-------------------------------------------+
    2 rows in set (0.03 sec)


    SHOW命令使用:

    mysql> SHOW DATABASES; //显示所以的数据库
    mysql> use mysql     //指定mysql表为默认库
    mysql> SHOW TABLES;   //显示默认库的所有表


    CREATE命令的使用:

    mysql> CREATE DATABASE testdb;    //创建库

    说明:在创建表时需要先创建表的结构,然后才能插入数据。


    DROP命令的使用:

    mysql> DROP DATABASE testdb;       //删除库时一定要注意在库里的表的数据有备份。

       注意:命令本身不区分字符大小写,但与文件系统相关的部分则根据OS的不同,可能区分大小写,关于命令可以使用help加相关命令,来进行查询命令帮助信息。这里只是介绍几种,剩下的还有很多,下面讲到新的命令在进行举例。

    5、MySQL服务器的几个重要概念

    约束(constraint): 某一个字段取值的范围

    • 主键约束 :只要某些字段被定为主键,则填入数据时不能重复,另外不能为NULL 值;

    • 外键约束:通过另一张表的取值范围来约束当前表; 

    • 唯一键约束:与主键相同,但是可以为空,主键只能有一个,唯一键只能多个; 

    • 检查式约束: 用户自定义的取值范围,通常为布尔表达式,符合条件才能填;  

    • 非空约束 : 不能为空; 

    键(key)

    • 主键:能惟一标识表中每一个记录的字段或字段的组合; 

    • 候选键 : 可以作为主键使用的字段或字段组合,不一定只有一种; 

    • 唯一键 : 唯一标示,但可以为空,数据不能重复出现;

    • 外键  :是另一表的主键, 外键可以有重复的,可以是空值;


    表创建需要定义

    • 需要定义的内容:字段名, 约束,字段类型,下面介绍mysql的字段类型。 

    • 字符类型:  

    char(#): 不区分大小写,保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。

    varchar(#):不区分大小写,保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。

    binary(n):区分大小写,固定长度的二进制数据。

    varbinary(n):区分大小写,可变长度的二进制数据。

    text(不区分大小写):存储指针,指向对象,可变长度的字符串。

    blob(区分大小写): 二进制大对象,只存储指针,指向对象

    • 数值型: 

        整型

    tinyint(m)       1个字节  范围(-128~127)

    smallint(m)     2个字节  范围(-32768~32767)

    mediumint(m) 3个字节  范围(-8388608~8388607)

    int(m)   4个字节  范围(-2147483648~2147483647)

    bigint(m)    8个字节  范围(+-9.22*10的18次方)

       注意:取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。 int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度,不知道这个m有什么用。

        浮点型

    float(m,d)      单精度浮点型    8位精度(4字节)     m总个数,d小数位

    double(m,d)  双精度浮点型    16位精度(8字节)    m总个数,d小数位

       注意:设一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。

       定点数

         浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。 decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。

      

    • 日期时间型

    date 日期 ‘2008-12-2‘  (3字节)

    time 时间 ‘12:25:36‘ (3字节)

    datetime 日期时间 ‘2008-12-2 22:06:44‘ (8字节)

    timestamp 自动存储记录修改时间即时间戳。

    • NULL

    • 内置类型

         ENUM(枚举类型)限定特定的取值范围,只能挑一个;

         SET (集合类型)可以组合集合内的任意元素,但集合以外的不能组合使用,可以挑N个组合。

    6、创建表

    • 语法

    CREATE TABLE tb_name(coll_name coll_type,......);
    • 应用举例

       关于创建下面表结构说明:NOT NULL 表示不能为空,NULL表示可以为空, UNSIGNED 表示无符号,DEDAULT表示若不输入就是其后默认值,注意,字符要加引号,数字不能加引号。AUTO_INCREMENT 表示自动增长类型的字段必须为主键或唯一键。PRIMARY KEY表示定义主键,若是UNIQ KEY则表示唯一键。

    mysql> use test
    mysql> CREATE TABLE students(StuID int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(30) NOT NULL,Age tinyint UNSIGNED,Gender ENUM(‘F‘,‘M‘) DEFAULT ‘M‘);
    Query OK, 0 rows affected (0.09 sec)
    mysql> DESC students;
    +--------+---------------------+------+-----+---------+----------------+
    | Field  | Type                | Null | Key | Default | Extra          |
    +--------+---------------------+------+-----+---------+----------------+
    | StuID  | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
    | Name   | varchar(30)         | NO   |     | NULL    |                |
    | Age    | tinyint(3) unsigned | YES  |     | NULL    |                |
    | Gender | enum(‘F‘,‘M‘)       | YES  |     | M       |                |
    +--------+---------------------+------+-----+---------+----------------+
    4 rows in set (0.00 sec)
    • 表中插入数据

    语法:

       INSERT INTO tb_name (col1,col2...) VALUE|VALUES (val1,val2.....)
       INSERT INTO tb_name VALUES(val1,val2....),给所有字段插入值
       INSERT INTO tb_name VALUES(val1,val2....),(val1,val2....) 批量插入
    mysql> INSERT INTO students(name,age,gender) VALUES(‘bols‘,23,‘F‘);
    Query OK, 1 row affected (0.07 sec)
    mysql> INSERT INTO students(name,age,gender) VALUES(‘longls‘,25,‘F‘),(‘cangls‘,30,‘F‘);
    Query OK, 2 rows affected (0.08 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    mysql> INSERT INTO students(name,age) VALUES(‘xiaoming‘,12),(‘xiaoli‘,32);
    Query OK, 2 rows affected (0.09 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    • 查询表中的数据

       在查找数据中WHERE后所跟的表达式可以是=、<、>、<=、>=,还可以使用组合条件即:and、or、not。还可以使用LIKE关键字进行匹配查询,LIKE后可以跟通配符:“%”任意长度的任意字符、“ _”匹配任意单个字符,也可以使用基于正则表达式的关键字RLIKE。

    mysql> SELECT * FROM students;
    +-------+----------+------+--------+
    | StuID | Name     | Age  | Gender |
    +-------+----------+------+--------+
    |     1 | bols     |   23 | F      |
    |     2 | longls   |   25 | F      |
    |     3 | cangls   |   30 | F      |
    |     4 | xiaoming |   12 | M      |
    |     5 | xiaoli   |   32 | M      |
    +-------+----------+------+--------+
    5 rows in set (0.00 sec)
    mysql> SELECT Name,Age FROM students WHERE Age > 25;
    +--------+------+
    | Name   | Age  |
    +--------+------+
    | cangls |   30 |
    | xiaoli |   32 |
    +--------+------+
    2 rows in set (0.12 sec)
    mysql> SELECT Name,Age,Gender FROM students WHERE Gender = ‘F‘ and Age > 25;
    +--------+------+--------+
    | Name   | Age  | Gender |
    +--------+------+--------+
    | cangls |   30 | F      |
    +--------+------+--------+
    1 row in set (0.17 sec)
    • 删除表中的数据

    语法:

    DELETE FROM tb_name WHERE clause;

    举例:

    mysql> DELETE FROM students WHERE Name LIKE ‘c%‘;
    Query OK, 1 row affected (0.11 sec)
    mysql> SELECT * FROM students;
    +-------+----------+------+--------+
    | StuID | Name     | Age  | Gender |
    +-------+----------+------+--------+
    |     1 | bols     |   23 | F      |
    |     2 | longls   |   25 | F      |
    |     4 | xiaoming |   12 | M      |
    |     5 | xiaoli   |   32 | M      |
    +-------+----------+------+--------+
    4 rows in set (0.00 sec)
    • 更新表中数据

    语法:

    UPDATE tb_name set col1 = value where clause;
    mysql> UPDATE students SET Age=22 WHERE Name=‘xiaoming‘;
    Query OK, 1 row affected (0.09 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    mysql> SELECT Name,Age,Gender FROM students WHERE Name=‘xiaoming‘;
    +----------+------+--------+
    | Name     | Age  | Gender |
    +----------+------+--------+
    | xiaoming |   22 | M      |
    +----------+------+--------+
    1 row in set (0.00 sec)


    本文出自 “粗茶淡饭” 博客,请务必保留此出处http://cuchadanfan.blog.51cto.com/9940284/1688373

    MySQL(二)

    标签:mysql、数据库

    人气教程排行