2のMySQLの基礎

設計パラダイム:

  最初のパラダイム:フィールドがアトミックであります

  第二のパラダイム:使用可能な主キーがあります

  第三のパラダイム:表が他の非キーフィールドの表上の任意の依存関係を持つべきではありません

 

データベース、データテーブルのデザインを作成します。

  フィールド:フィールド名、データ型、制約(キーによって実装されますが、キー事実はインデックスとして使用することができます)

 

DDLは:、DROP、ALTER、CREATE

DML:INSERT(REPLACE)、DELETE、UPDATE、SELECT

DCL:GRANT、REVOKE

 

データ型:データ型
    文字:
        固定長の文字
            大文字と小文字を区別しない文字(#)の有無にかかわらず、アカウントへの10のための
            大文字と小文字を区別バイナリ(#)可変長文字
            大文字と小文字を区別しないVARCHAR(#)ターミネーターと2を占め、1を与え、1占有
            大文字と小文字を区別のvarbinary(#)オブジェクトストレージストア大きなテキスト:
            テキストは大文字と小文字を区別しないで
            BLOB区別

        

         ---- バイナリラージオブジェクト
         ビルトインタイプ
            列挙型列挙は(あなたにいくつかを与えますいくつかのオプションアップ)がある
            のセット設定値は:     
        正確な整数[ 
    整数 ]、小数[ 小数がINT 
                。TINYINT 1つのバイト
                がsmallint 2バイト
                3バイトMEDIUMINT 
                INT        4バイト
                BIGINT 8バイト範囲:0 - 2 ^ 64 - 1つの
        近似値:単精度浮動小数点[ フロート ]、倍精度浮動小数点[ ダブル ] 
    日時
       日付:日付
       時刻:Time
       日付:TIMESTAMP。
       年:YEAR( 2)、YEAR(4)
修飾子:
 すべての種類:   NOT NULL:空でない制約   DEFAULT NULL:デフォルト値が設定されている
  
UNIQUE KEYに
PRIMARY KEYを
 数値適用:UNSIGNED :(整数および数値用)符号なし---のみ正の数のために、負の数を表していないAUTO_INCREMENT:成長から-整数
  
   
  

第二に、基本的なアプリケーションデータベース:

2.1、DDL

2.1.1表:

CREATE  TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1,col2 type2, ...)

  col1 type1:

     PRIMARY KEY(col1,...)

     INDEX(col1,...)

     UNIQUE KEY(col1,...)
查询默认引擎:
  mysql>SHOW ENGINES;
获取帮助:
  
mysql>HELP CREATE TABLE;

获取表创建命令:

 mysql> SHOW CREATE TABLE students;

查询表状态:
  mysql>SHOW TABLE STATUS LIKE 'tb_name' \G; \G--把每一行数据竖排显示
删除表
  mysql> DROP TABLE [IF EXISTS] 'tb_name';
查看表上的索引
  
mysql> SHOW INDEXES FROM [db_name.]tb_name;

E.G 

定义单字段的唯一键:

mysql> CREATE TABLE students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20) NOT NULL,Age tinyint UNSIGGNED);

多字段组合式唯一键(两者联合起来不一样就可以):

mysql> CREATE TABLE tbl2 (id int UNSIGNED NOT NULL ,name VARCHAR(20) NOT NULL,Age tinyint UNSIGNED,PRIMARY KEY(id,name));

 

2.1.2、ALTER 修改表

  帮助:
    mysql>HELP ALTER TABLE;

ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}  设定默认值或移除默认值这两个属性

CHANGE [COLUMN] old_col_name new_col_name column_definition    修改字段名字和字段定义
  [FIRST|AFTER col_name]

MODIFY [COLUMN] col_name column_definition      只修改字段定义 或字段的排序
  [FIRST | AFTER col_name]

语法:
ALTER TABLE 'tb_name'

  a) 字段:

    添加字段:add        

  | ADD [COLUMN] col_name  column_definition [FIRST | AFTER col_name]
  e.g  mysql> ALTER TABLE students ADD gender ENUM('m','f')  AFTER name;

    删除字段:drop

      e.g  mysql> ALTER TABLE students drop  gender ;  

    修改字段:alter(删除字段默认值)、change(该字段名称)、modify(字段属性定义)

        注:该字段名字的时候,还必须把字段的属性定义出来,任何字段都有其字段定义
         类型修饰符必须紧跟在类型后面
         如果主键定义过,可以不需要重新定义。
e.g
修改字段名称
mysql
> ALTER TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;   ERROR 1068 (42000): Multiple primary key defined mysql> ALTER TABLE students CHANGE id sid int UNSIGNED NOT NULL ;   Query OK, 0 rows affected (0.01 sec)   Records: 0 Duplicates: 0 Warnings: 0

  b) 索引: 键都是索引,但索引不是键

    添加索引:add     

添加唯一键约束:
   | ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name]
  e.g    mysql> ALTER TABLE students ADD UNIQUE KEY(name);
添加索引:
   | ADD {INDEX|KEY} [index_name]   
  e.g    mysql> ALTER TABLE students ADD INDEX(age); 

    删除索引:drop

  注:每个索引都有Key_name字段值,如果定义索引时没给索引名字,那么索引名字就是字段名字;如果索引在多键上,那么索引名字就是多键上的第一个字段名字

  c) 表选项 (副作用大一般不用)

2.1.3索引:是特殊数据结构;定义在查找时作为查找条件的字段;只用添加和删除

   优点:加速查询操作

   缺点:额外占用空间;插入数据时需要插入2次-----原表中插入一行的同时索引中也要插入一行,更重要的是索引是排序的

a)、帮助:

  mysql> HELP CREATE|DROP  INDEX;

b)、语法:

创建索引:
  CREATE INDEX index_name ON tbl_name (inde_col_name,...) 注:索引只要用不上了就立刻删除,否则会产生多余IO,影响性能

删除索引:
  
DROP INDEX index_name ON tbl_name

 e.g

  mysql> DROP INDEX name ON students;

 

三、DML: INSERT、DELETE、SELECT、UPDATE

3.1、INSERT

a)帮助信息:

  mysql> HELP INSERT;

b)语法:

INSERT [INTO] tbl_name [(col1_name,col2_name,...)] {VALUES | VALUE} (value1_list),(value2_list),(...),...

e.g  mysql> INSERT INTO students  VALUES(1,'yangguo','m'),(2,'guoxiang','F');

    mysql> INSERT INTO students  (sid,name)   VALUES (3,'zhangwuji'),(4,'zhaoming');

 

3.2、DELETE

3.2.1、语法:

DELETE  FROM tbl_name [WHERE clause] [ORDER BY 'col_name'[DESC]][LIMIT [m,]n] 
#只写到WHERE前面会清空整张表(慎)

e.g   mysql> DELETE FROM students WHERE sid=3;

 

3.3、SELECT 

3.3.1、语法

SELECT col1,col2,... FROM tbl_name [WHERE clause] [ ORDER BY 'col_name' [ASC|DESC] ] [LIMIT [m,]n]

                            #指定字段显示       [#指定字段并判断显示 ] [排序【升序|降序】]

LIMIT 

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
 
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,
第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数初始记录行的偏移量是
0(而不是 1):
为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

3.3.2、字段表示法:

   *: 所有字段
  as: 字段别名    col1 AS alias1
    
    mysql> SELECT sid as stusid,name as stuname FROM students;

 

注:不允许一个经常拿来做查找条件字段出现空值

 

E.G

a)mysql> SELECT * FROM students WHERE sid>3;

b)mysql> SELECT * FROM students WHERE gender='m';

根据name字段排序 默认升序

c)mysql> SELECT * FROM students ORDER BY name;

d)降序排序

 mysql> SELECT * FROM students ORDER BY name DESC;

e)限制显示前2行:

 mysql> SELECT * FROM students ORDER BY name DESC LIMIT 2;

f)偏移量为1,最大数目是2行;

 mysql> SELECT * FROM students ORDER BY name DESC LIMIT 1,2;

 

3.3.3、WHERE clase 

  操作符:>、< 、>=、 <= 、 == 、!=
      BETWEEN .... AND ....
      
     基于字符串比较的      LIKE :模糊匹配         
%:任意长度的任意字符         _: 任意单个字符       RLIKE :基于正则表达式匹配 (能不用就不用---基于引擎查找)       IS NULL       IS NOT NULL   
条件逻辑操作: and 、or 、not

E.G   

mysql> SELECT * FROM students WHERE sid>=2 and sid <=4;

mysql> SELECT * FROM students WHERE sid BETWEEN 2 AND 4;

 

匹配 "z" 开头字段

  mysql> SELECT * FROM students WHERE name LIKE 'z%';

 

3.4、UPDATE

3.4.1、语法

UPDATE tbl_name SET col1_name=val1, col2_name=val2,... [WHERE clause] [ORDER BY 'col_name'[DESC]][LIMIT [m,]n]

e.g   mysql> UPDATE students SET gender='f' WHERE sid=4;

 

おすすめ

転載: www.cnblogs.com/liuzhiyun/p/11877108.html