mysql学习(持续更新)

Mysql基本命令

{}是必须要有的,[]是可有可没有,|是或

登录

    mysql -u -p -P -h --prompt
    #{u是用户名,p是密码},P是端口,-h是服务器地址,prompt设置提示符(\D:时间,\d:当前数据库,\h:服务器名称,\u:当前用户)


登出

    exit;|quit;|\q;


常用命令:

    SELECT VERSION();显示当前服务器版本
    SELECT NOW();显示当前日期时间
    SELECT USER();显示当前用户
    SHOW DATABASES;显示所有的数据库
    SHOW CREATE DATABASE first;显示first数据库的信息,编码方式
    SHOW WARNINGS;显示错误信息
    SELECT DATABASE();显示当前用户打开的数据库
    SHOW TABLES [FROM db_name];查看db_name数据库下的数据表
    SHOW CREATE TABLE tbl_name;查看创建tbl_name的属性信息
    SHOW INDEXES FROM tb_name;查看tb_name数据表中有索引情况
    SHOW COLUMNS FROM tbl_name;查看tbl_name数据表的结构



创建数据库

    CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name 
    #db_name是创建的数据库名称,charset_name是该数据库的编码格式
    示例:
    CREATE DATABASE IF NOT EXISTS first DEFAULT CHARACTER SET = utf8
    #创建一个名字叫first的数据库,用utf8编码



修改数据库编码

    ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name
    #db_name是要修改的数据库的名称,charset_name是修改后的编码格式
    示例:
    ALTER DATABASE first CHARACTER SET = gbk;
    #把名为first的数据库改成gbk格式


删除数据库

    DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
    #db_name是要删除的数据库名称
    示例:
    DROP DATABASE IF EXISTS first
    #删除一个名为first的数据库


打开数据库

    USE db_name;
    #db_name是要打开的数据库名称
    示例:
    USE first;
    #打开名叫first的数据库



创建数据表

    CREATE TABLE [IF NOT EXISTS] table_name(
        column_name data_type,
        ...
    );
    #table_name是要创建的数据表的表名,column_name是字段名称,data_type是该字段存储的数据类型
    示例:
    CREATE TABLE t1(
    -> id INT UNSIGNED AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL,
    -> PRIMARY KEY(id));
    CREATE TABLE tbl_first(
        username VARCHAR(20) NOT NULL,
        age TINYINT UNSIGNED,
        salary FLOAT(8,2) UNSIGNED,
        id INT UNSIGNED AUTO_INCREMENT,
        sex ENUM('男','女','保密') DEFAULT '保密',
        PRIMARY KEY(id)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    #创建一个名为 tbl_first的数据表,有三个字段,分别是:
    #username字段,类型是varchar类型,最大长度20;
    #age字段,是TINYINT类型,并且没有负数;
    #salary字段,是浮点型,整数和小数共8位,小数两位,没有负数,如果没有赋值,那么他是6.6
    #id字段,整数型,没有正负号,都是正数,自动往上加,不会重复
    #sex字段,值从(男,女,保密)中三选一,如果没有赋值,那么默认是保密,赋别的值则为空
    
    #主键是id字段
    #具体数据类型见本文最后
    
    #NOT NULL表示该字段不能为空,如果插入记录是没有对它赋值,那就是默认值
    #UNSIGNED属性是没有符号位,也就是没有负数的情况
    #AUTO_INCREMENT定义列为自增的属性,用于正数和零位小数的浮点数。必须和主键一起使用,数值会自动加1。
    #PRIMARY KEY关键字用于定义列为主键 您可以使用多列来定义主键,列间以逗号分隔。(见后面主键)
    #ENGINE 设置存储引擎,CHARSET 设置编码。//可以不设置
    #DEFAULT表示插入记录的时候如果没有赋值,那么就使用默认值


查看数据表结构

  SHOW COLUMNS FROM tbl_name
    #tbl_name是数据表的表名
    示例:
    SHOW COLUMNS FROM tbl_first;
    #查看tbl_first这个数据表的结构


往数据表里插入记录

    INSERT [INTO] tbl_name [(col_name,...)] VALUES(val,...),(val2,...);
    #tbl_name是要插入的数据表的表名,col_name是要插入的字段名,val是对应字段的值,也可以是数学表达式
    示例:
    INSERT tbl_first (age,name) VALUES(9*2,'ZSL'),(10,'two');
    #在tbl_first表中总插入两条记录,第一条记录age字段值为18,username字段值为'ZSL',第二条记录age字段是10,username字段是'two'
    #如果表格的所有字段都有赋值,可以省略col_name部分
    INSERT tbl_first VALUES('TOM',25,1000.1);
    #插入一条记录,username字段是'TOM',age字段是25,salary字段值是1000.1000


记录查找

    SELECT expr,... FROM tbl_name
    #expr是查找记录的条件,tbl_name是要在tbl_name表中进行查找
    示例:
     SELECT * FROM tbl_first;
     #把tbl_first表总的所有数据列出来
    +----------+------+---------+
    | username | age  | salary  |
    +----------+------+---------+
    | TOM      |   20 | 1000.00 |
    | ZSL      |   18 |    NULL |
    +----------+------+---------+
    4 rows in set (0.00 sec)


记录删除:

    DELETE FROM tb_name WHERE expr;
    #tb_name是要删除记录所在的表,expr是删除记录的条件


约束(更多查看上面创建数据表的具体操作)

#约束是为了数据的完整性和统一性,分为表级约束(针对两个或者两个以上的字段)和列级约束(针对某一字段)

    主键约束(PRIMARY KEY):

        #主键保持记录的唯一性

        #只能有一个主键约束

        #主键自动为NOT NULL

        #多字段为主键时,成为联合主键,只要不是所有字段记录同时相同,就可以插入

        #主键在创建的同时自动添加索引

        

    唯一约束(UNIQUE KEY):

        #可以保证记录唯一性

        #可以为空值

        #可以存在多个唯一约束

        

    默认约束(DEFAULT)

        #如果插入记录是没有对它赋值,就使用默认约束指定的值

        

    非空约束(NOT NULL)

        #插入字段时候此字段不能为空,如果没有赋值,那么自动默认值

        

    外键约束(FOREIGN KEY)(表级约束)

        #保持数据一致性,完整性,实现一对一或者一对多的关系

        #父表(子表参照的表)和子表(具有外键列的表)必须都用InnoDB存储引擎,禁止使用临时表

        #外键列(加过FOREIGN关键字的列)和参照列(外键列参照的列)必须具有相似的数据类型(数字的长度和是否有符号必须一样,字符长度可以不一样)

        #外键列和参照列必须创建索引,如果外键列没有索引,那么mysql自动创建索引,参照列没有索引,不会自动创建

        #插入记录时候要先在父表插入信息,然后在子表插入信息

        #可以多个子表绑定同一个父表

        

        !外键约束的参照操作:

            CASCADE:从父表删除或更新且自动删除或更新子表中的匹配行
            SET NULL:从父表删除或更新行,并子表中的外键列为NULL,如果使用此选项,要保证子表列没有设置NOT NULL
            RESTRICT:拒绝对父表的删除或更新操作
            NO ACTION:标准SQL的关键字,在mysql中和RESTRICT相同
            使用方法:ON DELETE后面加上相应的操作
        
        CREATE TABLE tb_a(
            id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT
            );
        #创建数据表tb_a,有一个id字段,是主键,自增长
        
        CREATE TABLE tb_b(
            pid SMALLINT UNSIGNED,
            FOREIGN KEY (pid) REFERENCES tb_a (id) ON DELETE CASCADE
            );
        #创建数据表tb_b,有一个pid字段,外键约束tb_a中的id字段.此时tb_b是子表,pid字段是外键列,tb_a是父表,id字段是参照列
        #参照操作是CASCADE即从父表删除或更新且自动删除或更新子表中的匹配行

        

数据表的修改

    添加单列

        ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]
        #tbl_name是要插入列的表,col_name,column_definition是插入列的名字和属性,[FIRST|AFTER col_name],如果是选择first,那么插入到最前面,如果是AFTER col_name,那么插入到col_name列的后面,什么都不加,就是插入到最后面
        ALTER TABLE first_tbl ADD age INT UNSIGNED DEFAULT 10 AFTER name;
        #在name列后面插入一个age列,int类型,没有符号,默认10

    

    添加多列

        ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,...)
        #添加多个列在数据表的最后面

    

    删除列

    ALTER TABLE tbl_name DROP [COLUMN] col_name;
    #tbl_name是删除列所在的数据表,col_name是要删除的列
    ALTER TABLE tbl_name DROP [COLUMN] col_name,DROP [COLUMN] col_name1;
    #把col_name和col_name1两列同时删除
    #外键列好像没法删除

    

    添加主键约束:

        ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] PRIMARY KEY[index_type] (index_col_name,...)
        #tbl_name是要添加主键的表明,CONSTRAINT[symbol]是添加主键约束的名字
        ALTER TABLE firest_tbl ADD PK_firest_tbl_id CONSTRAINT PRIMARY KEY (id);
        #在firest_tbl表中的id字段设置成名为PK_firest_tbl_id的主键

    删除主键约束:

        ALTER TABLE tbl_name DROP PRIMARY KEY
        #删除tbl_name表的主键,因为一个表只有一个主键,所以不用指定删除约束的名字

        

    添加唯一约束:

        ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)

    

    删除唯一约束:

        ALTER TABLE tbl_name DROP {INDEX|KEY} index_name;
        #删除tbl_name表中名字教index_name的唯一约束

        

    添加外键约束:

        ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] FOREIGN KEY [index_name](index_col_name,...) reference_definition
        #
        ALTER TABLE tbl_one ADD FOREIGN KEY (pid) REFERENCES tbl_two (id);
        #给tbl_one表中的pid列添加外键,参考tbl_two列中的id列,就是id列是父列

        

    删除外键约束:

        ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
        #删除tbl_name表中的名为fk_symbol的外键约束
    添加/删除默认约束
        ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal|DROP DEFAULT}
        #给tbl_name表中的col_name列添加或者删除默认值
        ALTER TABLE first_tbl ALTER age SET DEFAULT 15;
        #给first_tbl表中的age字段添加默认值15
        ALTER TABLE first_tbl ALTER age DROP DEFAULT;
        #把age字段的默认值给删除了

        

    修改列定义:

        ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
        #把tbl_name表中的col_name字段更改属性,最后可以设置它到第一或者位于某一字段的后面

    修改列名称:

        ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
        #把tbl_name表中的col_name字段更改名字和属性,最后可以设置它到第一或者位于某一字段的后面

    修改数据表的名称:

        RENAME TABLE tbl_name TO new_tbl_name[,tbl_name2 TO new_tbl_name2]...

数据库的基本类型

转自菜鸟教程

MySQL 数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。


数值类型

MySQL支持所有标准SQL数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型大小范围(有符号)范围(无符号)用途
TINYINT1 字节(-128,127)(0,255)小整数值
SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度
浮点数值
DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度
浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值


日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型大小
(字节)
范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP4

1970-01-01 00:00:00/2038

结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

YYYYMMDD HHMMSS混合日期和时间值,时间戳


字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

类型大小用途
CHAR0-255字节定长字符串
VARCHAR0-65535 字节变长字符串
TINYBLOB0-255字节不超过 255 个字符的二进制字符串
TINYTEXT0-255字节短文本字符串
BLOB0-65 535字节二进制形式的长文本数据
TEXT0-65 535字节长文本数据
MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215字节中等长度文本数据
LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据
LONGTEXT0-4 294 967 295字节极大文本数据

CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。

有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。

mysql用户管理

查看这里

xwm

还是一个菜鸟


发表评论 暂无评论

*