Title

MySQL

 

 

参考:MySQL快速学习入门 - MySQL教程™ (yiibai.com)

 

一、MySQL表字段类型:

可分为:数字、(时间,日期),字符串

1、数字数据类型:

  INT - 正常大小的整数。若为有符号,范围是:-2147483648~2147483647。若无符号,范围是:0~4294967295。可以指定多达11位的宽度。

  TINYINT - 一个非常小的整数。若有符号,范围是:-128~127。若无符号,0~255,可以指定多达4位数的宽度。

  SMALLINT - 一个小的整数。若有符号,范围是-32768~32767。若无符号,范围是:0~65535,可以指定最多5位的宽度。

  MEDIUMINT - 一个中等大小的整数。若有符号,范围是:-8388608~8388607。 若无符号,范围是:0~16777215,可以指定最多9位的宽度。

  BIGINT - 一个大的整数。若有符号,范围是:-9223372036854775808~9223372036854775807。

     若无符号,范围是:0~18446744073709551615. 可以指定最多20位的宽度。

  FLOAT(M,D) - 不能使用无符号的浮点数字。可以定义显示长度(M)和小数位数(D)。这不是必需的,并且默认为10,2。

     其中2是小数的位数,10是数字(包括小数)的总数。小数精度可以到24个浮点。

  DOUBLE(M,D) - 不能使用无符号的双精度浮点数。可以定义显示长度(M)和小数位数(D)。 这不是必需的,默认为16,4,其中4是小数的位数。

     小数精度可以达到53位的DOUBLE。 REAL是DOUBLE同义词。

  DECIMAL(M,D) - 非压缩浮点数不能是无符号的。在解包小数,每个小数对应于一个字节。定义显示长度(M)和小数(D)的数量是必需的。

      NUMERIC是DECIMAL的同义词。

2、日期和时间数据类型

  DATE - 格式是:2021年8月21日。会被存储为2021-08-21。
  DATETIME - 格式是:2021年8月21日 19时27分36秒。会被存储为2021-08-21 19:27:36。
  TIMESTAMP - 格式是:2021年8月21日 19时27分36秒。会被存储为20210821192736。数字之间的没有连字符。
  TIME - 格式:19时27分36秒。会被存储为19:27:36 。
  YEAR(M) - 记录年份:分为只记录年份的末尾两位和四位,默认记录四位。
 

3、字符串数据类型

  CHAR(M) - 字符串M个字符长度(M范围为:1~255),默认为1。
 
  VARCHAR(M) - 可变长度的字符串(M:1~255),创建VARCHAR类型字段时,必须定义长度。
  
  BLOB or TEXT - 字段的最大长度是65535个字符。
    BLOB是“二进制大对象”,并用来存储大的二进制数据,如图像或其他类型的文件。
    定义为TEXT文本字段还持有大量的数据;
    两者之间的区别是,排序和比较上存储的数据,BLOB大小写敏感,而TEXT字段不区分大小写。不用指定BLOB或TEXT的长度。
 
  TINYBLOB 或 TINYTEXT - BLOB或TEXT列用255个字符的最大长度。不指定TINYBLOB或TINYTEXT的长度。
 
  MEDIUMBLOB or MEDIUMTEXT - BLOB或TEXT列具有16777215字符的最大长度。不指定MEDIUMBLOB或MEDIUMTEXT的长度。
  
  LONGBLOB 或 LONGTEXT -  BLOB或TEXT列具有4294967295字符的最大长度。不指定LONGBLOB或LONGTEXT的长度。
  
  ENUM - 枚举,当定义一个ENUM,要创建它的值的列表,这些是必须用于选择的项(也可以是NULL)。
    例如,如果想要字段包含“x”或“y”或“z”,那么可以定义为ENUM为 ENUM(“x”,“y”,“z”)也只有这些值(或NULL)才能用来填充这个字段。


看一下表的格式:(来源:MySQL 教程 | 菜鸟教程 (runoob.com)
  • 表头(header): 每一列的名称;
  • 列(col): 具有相同数据类型的数据的集合;
  • 行(row): 每一行用来描述某条记录的具体信息;
  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
  • 键(key): 键的值在当前列中具有唯一性。
 

二、常用的一些sql语句

1、创建一个表

create table person(
   id INT NOT NULL AUTO_INCREMENT,
   name VARCHAR(30) NOT NULL,
   sex VARCHAR(23) NOT NULL,
   income FLOAT,
   birthday DATE,
   PRIMARY KEY ( id )
);

创建一个person并制作表头(依次为:id,name,sex,income,birthday)



参数解释:
  • 字段使用NOT NULL属性,是因为我们不希望这个字段的值为NULL。 因此,如果用户将尝试创建具有NULL值的记录,那么MySQL会产生错误。

  • 字段的AUTO_INCREMENT属性告诉MySQL自动增加id字段下一个可用编号。

  • 关键字PRIMARY KEY用于定义此列作为主键。如果要多个,分号隔开即可。

 

 

2、插入值:INSERT INTO table_name[表名] (对应的表头对应的那一列)values(加入对应的值):

语法:INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
 
id会自动随着写入并增加:
 
INSERT INTO person(name,sex,income,birthday)values('第一个','',3200.23,'1997-02-23');

我自己加了三个:

 

3、查询SELECT

语法:
SELECT field1, field2,...fieldN table_name1, table_name2... [WHERE Clause] [OFFSET M ][LIMIT N]

  • 可以使用分隔的一个或多个逗号从多个表,以及使用WHERE子句包括各种条件,但WHERE子句是SELECT命令的可选部分

  • 可以在一个SELECT命令指定读取一个或多个字段

  • 可以指定星号(*)代替选择的字段。在这种情况下,将返回所有字段

  • 可以指定任意的条件在 WHERE 子句后面

  • 可以使用OFFSET指定一个偏移量,SELECT从那里开始返回记录。默认情况下 offset 的值是 0

  • 可以使用LIMIT属性限制返回的数量

 

* re准则,代表全部

所以会把person全部数据查询

 

 

4、条件语句可以用于筛选符合条件的语句:

语法:
SELECT field1, field2,...fieldN table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2...

  • 可以使用逗号分隔一个或多个表,以及WHERE子句包括各种条件,但WHERE子句只是SELECT命令的可选部分

  • 可以指定使用任何条件在WHERE子句中

  • 可以指定一个以上的条件在使用AND或OR运算符中

  • WHERE子句可以用DELETE 或 UPDATE的SQL命令一起,也可以指定一个条件使用。

一般都会搭配SELECT:

把person男性筛选出来。

除非执行字符串LIKE比较,比较是不区分大小写。可以使用BINARY关键字使搜索区分大小写如下:
 
 SELECT * from person  WHERE BINARY sex='男';
 
 

5、UPDATE(更新数据或修改)

语法:UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
  • 完全可以更新一个或多个字段。

  • 可以指定使用任何条件在WHERE子句中。

  • 可以一次更新一个表中的值。

当想更新表中选定行,WHERE子句是非常有用的

 
给男性收入增加300
 

6、DELETE(删除)

语法:DELETE FROM table_name [WHERE Clause]
  • 如果WHERE子句没有指定,则所有MySQL表中的记录将被删除。

  • 可以指定使用任何条件在WHERE子句中。

  • 可以一次删除一个表中的所有记录。

 

删除第四个:

 7、LIKE()

语法:
SELECT field1, field2,...fieldN table_name1, table_name2... WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'/
  • 可以指定使用任何条件在WHERE子句中

  • 可以使用LIKE子句在WHERE子句中

  • 可以使用LIKE子句代替等号(=)

  • 当LIKE连同%符号使用,那么它就会像一个元字符的搜索

  • 可以指定一个以上的条件使用AND或OR运算符

  • WHERE... LIKE子句可以使用SQL命令的DELETE 或 UPDATE ,也可以指定一个条件

把name中含有个的全部

8、ORDER BY排序结果(排序)

语法:
SELECT field1, field2,...fieldN table_name1, table_name2... ORDER BY field1, [field2...] [ASC [DESC]]

  • 可以排序返回所列出提供的任何字段的结果

  • 可以在多个字段排序结果

  • 可以使用关键字ASC或DESC来执行升序或降序排序。默认情况下,按升序排列

  • 可以使用WHERE ... LIKE子句以通用的方式放置条件

 
按收入排序从小到大

 

 

name的asc值排序

 

 

9、Join联接

 从多个表中,在单个查询获得数据。

可以在单个SQL查询中使用多个表。连接MySQL中的行在两个或多个表到一个表。

可以使用Join在SELECT,UPDATE和DELETE语句加入MySQL表。我们将看到LEFT JOIN的例子, 这与简单的MySQL JOIN有所不同。

新建一个表格:

 

联合做一个新的表

SELECT 到 FROM之间的作为表头, FROM person a, person_number b是把person作为a,person_number作为b。WHERE是条件
 

 

NULL值

  • IS NULL: 如果列的值为NULL,运算结果返回 true

  • IS NOT NULL: 如果列的值不为NULL,运算结果返回 true

  • <=>: 运算符比较值,(不同于=运算符)即使两个空值它返回 true

 
 
 

三、其它

1、MySQL事务

事务是数据库处理操作,其中执行就好像它是一个单一的一组有序的工作单元。

事务性质

事务具有以下四个标准属性,通常由首字母缩写ACID简称:

  • 原子性: 确保了工作单位中的所有操作都成功完成; 否则,事务被中止,在失败时会被回滚到事务操作以前的状态。

  • 一致性:可确保数据库在正确的更改状态在一个成功提交事务。

  • 隔离: 使事务相互独立地操作。

  • 持久性: 确保了提交事务的结果或系统故障情况下仍然存在作用。

在MySQL中,事务以BEGIN WORK语句开始开始工作,并使用COMMIT或ROLLBACK语句结束。SQL命令在开始和结束语句之间构成大量事务。

 
 

2、提交和回滚

这两个关键字Commit和Rollback主要用于MySQL的事务。

  • 当一个成功的事务完成后,COMMIT命令发出的变化对所有涉及的表将生效。

  • 如果发生故障,ROLLBACK命令发出后,事务中引用的每个表将恢复到事务开始之前的状态。

可以通过设置AUTOCOMMIT这个会话变量控制事务的行为。如果AUTOCOMMIT设置为1(默认值),那么每个SQL语句(在事务或不在事务)被认为是一个完整的事务并提交,在默认情况下是在当它完成时。当AUTOCOMMIT设置为0,通过发出SET AUTOCOMMIT=0命令, 随后的一系列语句就像一个事务,但并没有任何活动被提交直到一个明确的发出 COMMIT 语句。

可以通过使用PHP 的 mysql_query()函数执行这些SQL命令。

 
 

21、MySQL Alter命令

当想改变表名,MySQL的ALTER命令非常有用, 在添加或删除任何表字段到现有列在表中。

删除,添加或重新定义列

 

 

1、假设想要从上面MySQL的表中删除一个现有列,那么使用ALTER命令以及DROP子句如下:

ALTER TABLE person  DROP birthday;

如果在表中列是唯一的一个,那么DROP将无法正常工作。

 

 

2、要添加列,使用ADD并指定列定义。添加 birthday列到person

ALTER TABLE person  ADD birthday DATE;



 

 SHOW COLUMNS FROM person;   显示每一列的情况

若要指示列在表中的特定位置,要么使用FIRST把它放在第一列或AFTER col_name 来指定新的列应放置col_name之后。 试试下面的ALTER TABLE语句,使用 SHOW COLUMNS 看看有什么影响:

 

 

 

 



 

 

FIRST 和 AFTER 只能在ADD子句中使用。这意味着,如果你想在表中重新排位现有列,首先必须删除(DROP )它,然后在新的位置添加(ADD)它。

更改列定义或名称

1、要改变字段 c 从 CHAR(1) 修改为 CHAR(10), 那么可以这样做:

ALTER TABLE person_number MODIFY first CHAR(10);

 

2、CHANGE语法可能有点不同。CHANGE关键字后的名称是要修改的列,然后指定新的定义,其中包括新的名称。试试下面的例子:

ALTER TABLE person_number CHANGE first1 new BIGINT;



 

 

3、如果现在使用CHANGE转换i列从BIGINT为INT,但不改变列名,该语句执行预期:

ALTER TABLE person_number CHANGE new new INT;

 

ALTER TABLE影响Null和缺省值属性

当使用 MODIFY 或 CHANGE修改列,还可以指定该列是否能为NULL值以及它的默认值。事实上,如果你不这样做,MySQL也会自动分配这些属性值。

下面是一个例子,这里 NOT NULL列将使用100作为默认值。

  ALTER TABLE person_number MODIFY number BIGINT NOT NULL DEFAULT 100;

如果不使用上面的命令,那么MySQL将填补使用NULL 来填充所有列值。

更改列的默认值

可以使用ALTER命令更改任何列的默认值。尝试下面的例子。

  ALTER TABLE person_number ALTER number SET DEFAULT 1000;


从任何一列删除默认的约束,可以使用ALTER命令以及DROP子句。

ALTER TABLE person_number ALTER number DROP DEFAULT;


更改表类型

可以通过使用ALTER命令以及TYPE子句修改表的类型。

若想要知道一个表的当前类型,那么可使用 SHOW TABLE STATUS 语句。

 

 

重命名表

要重命名表,使用ALTER TABLE语句的RENAME选项。

 

 

posted @ 2021-12-27 09:37  宇一心途  阅读(450)  评论(0)    收藏  举报