数据库相关的表操作,准备做大项目。
创建数据表 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR (50 ), gender VARCHAR (10 ), birthdate DATE , age INT , school VARCHAR (50 ), phone VARCHAR (20 ), education VARCHAR (20 ) ); d:自增长的主键列 username:用户名 gender:性别 birthdate:出生日期 age:年龄 school:学校 phone:电话号码 education:学历 或者 用户名,电话号码,邮箱,密码 CREATE TABLE users { id INT AUTO_INCREMENT PRIMARY KEY; username VARCHAR (50 ), phone VARCHAR (20 ), email VARCHAR (100 ), password VARCHAR (50 ) }
表连接 表联立,连接俩数据表
MySQL中的表连接分为以下几种: 内连接(Inner Join ):返回两个表中的匹配行,只有在两个表中都存在匹配时才返回数据。(两者都存在) SELECT * FROM table1,table2 where table1.id= table2.id; 外连接(Outer Join ):左外连接(Left Outer Join )和右外连接(Right Outer Join ),其中左外连接返回左表中所有行以及右表中匹配的行,而右外连接则返回右表中所有行以及左表中匹配的行。 左外连接: 以左表为准,右表没有符合左表的数据则返回NULL 简单理解:左表显示全部,右表仅显示匹配项。 SELECT * FROM table1 LEFT JOIN table2 ON table1.id= table2.id; 自连接(Self Join ):在同一张表中进行连接,可以将一张表看作两张表。 交叉连接(Cross Join ):返回两个表中所有可能的组合,也称为笛卡尔积。
举例
SELECT column_name(s)FROM table1JOIN table2ON table1.column_name = table2.column_nameJOIN table3ON table2.column_name = table3.column_name;column_name(s): 要查询的字段 table1,table2,table3: 数据表1 ,2 ,3 table1.column_name, table2.column_name, table3.column_name: 用来将数据库表两两互相连接的语句,前提是两数据表有相同的字段。
子查询 1. 借用第二表,对第二表进行筛选 两表的列: table1 : id,username,sal table2 : id,age,home_addr 查询语句: SELECT table1.username as name,table2.age as age FROM table1 join ( SELECT id,age FROM table2 ) as table3 on table1.id= table3.id; 2. 子查询关键字 in , ont in , exists , not exists exists (select 语句) EXISTS :如果子查询返回任何行,则返回真值。 存在记录:true (包括null ) 不存在录:false = > 记录 NOT EXISTS :如果子查询没有返回任何行,则返回真值 exists 举例: 这个查询中,子查询从customers表中检索与当前订单相应的客户记录。如果客户存在,则主查询从orders表中返回相应的订单记录。如果不存在,则不返回。 SELECT * FROM orders o WHERE EXISTS ( SELECT * FROM customers c WHERE c.customer_id = o.customer_id );
记录联合
UNION: 合并两个或多个 SELECT 语句的结果集时,删除重复的行。
UNION 操作符只会选出不同的值,不会返回重复的值。
UNION ALL: 合并两个或多个 SELECT 语句的结果集时,保留所有行,包括重复的行。
UNION ALL 操作符会选出所有的值,包括重复的值。
SELECT Name FROM Table1UNION SELECT Name FROM Table2;
MYSQL支持的数据类型 数值类型: 整型(TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT) 浮点型(FLOAT, DOUBLE, DECIMAL)。 日期和时间类型:DATE, TIME, DATETIME, TIMESTAMP, YEAR。 字符串类型:CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, BINARY, VARBINARY, TINYBLOB, MEDIUMBLOB, BLOB, LONGBLOB, ENUM, SET。 其他类型:BIT, BOOLEAN, JSON, GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION。
数值类型 TINYINT: 有符号的范围为-128 到127 , 无符号的范围为0 到255 。 占用1 个字节。 SMALLINT : 有符号的范围为-32768 到32767 无符号的范围为0 到65535 。 占用2 个字节。 MEDIUMINT: 有符号的范围为-8388608 到8388607 无符号的范围为0 到16777215 。 占用3 个字节。 INT 或INTEGER : 有符号的范围为-2147483648 到2147483647 无符号的范围为0 到4294967295 。 占用4 个字节。 BIGINT : 有符号的范围为-9223372036854775808 到9223372036854775807 无符号的范围为0 到18446744073709551615 。 占用8 个字节。 FLOAT : 单精度浮点数,精度为大约7 位小数。 占用4 个字节。 DOUBLE : 双精度浮点数,精度为大约15 位小数。 占用8 个字节。 DECIMAL : 高精度小数,支持存储大数值并保持精度,适用于财务计算等场景。 DECIMAL (M,D) 表示一个有符号的精度为 M,小数位数为 D 的小数。M 和 D 的最大值为65 。
无符号化-UNSIGNED CREATE TABLE example ( id INT UNSIGNED, value INT );
填充 CREATE TABLE example ( id INT (5 ) ZEROFILL PRIMARY KEY, name VARCHAR (20 ) ); INSERT INTO example (id, name) VALUES (1 , 'John' ), (10 , 'Jane' ), (100 , 'Bob' );SELECT * FROM example;输出如下: + | id | name | + | 00001 | John | | 00010 | Jane | | 00100 | Bob | +
自动递增和主键约束 AUTO_INCREMENT 和 PRIMARY_KEY
AUTO_INCREMENT 自动递增 PRIMARY_KEY 主键约束 主键约束:列值必须是唯一的,不可以重复 主键列的值不能为空,即主键列不能有 NULL 值,因为 NULL 不是一个有效的主键值。 主键列的值必须是唯一的,即不能在表中存在两个或多个主键列的值相同的记录。 主键列的值不能被更新或删除,因为它们在表中是唯一的标识符。 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR (50 ), age INT ); alter table 表名 drop primary key(字段名)
设置默认值 CREATE TABLE person ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR (50 ), age INT DEFAULT 18 , PRIMARY KEY (id) );
日期和时间类型 字符串类型