MySQL基础之数据类型与表的管理

2018-10-04  本文已影响0人  磊_5d71

MySQL数据库简介及安装

MySQL登陆与退出常用命令

创建和管理数据库常用操作

数据表及数据类型简介

2、字符串类型


图片.png
--创建数据库
 CREATE DATABASE IF NOT EXISTS alan CHARACTER SET 'UTF8';

-- 打开alan数据库

USE DATABASE alan;

-- 用户表 user
CREATE TABLE IF NOT EXISTS alan_user(
    id INT,
    username VARCHAR(20),
    password CHAR(32),
    email VARCHAR(50),
    age TINYINT,
    card CHAR(18),
    tel CHAR(11),
    salary FLOAT(8,2),
    married TINYINT(1),
    addr VARCHAR(100),
    sex ENUM('男','女','保密')
)ENGINE=INNODB CHARSET=UTF8;

完整性约束条件

CREATE TABLE test_str(
  a CHAR(5),
  b VARCHAR(5)
);
-- char存储数据的时候,后面会用空格填充到指定长度,而在检索的时候会去掉后面的空格,varchar存储数据的时候不进行填充,尾部的空格会留下。
INSERT INTO test_str(a,b) values('','');
INSERT INTO test_str(a,b) values('a','a');
INSERT INTO test_str(a,b) values('ab','ab');
INSERT INTO test_str(a,b) values('abc','abc');
INSERT INTO test_str(a,b) values('abcd','abcd');
INSERT INTO test_str(a,b) values('abcde','abcde');
INSERT INTO test_str(a,b) values('abcdef','abcdef');
INSERT INTO test_str(a,b) values(' 123 ',' 123 ');
SELECT CONCAT('*',a,'*'),CONCAT('*',b,'*') FROM test_str;
-- 测试TEXT不能有默认值
CREATE TABLE test_str1(
  content TEXT DEFAULT 'THIS IS A TEST'
)
--  测试枚举类型,会自动过滤掉空格
CREATE TABLE test_enum1(
  sex ENUM('男','女','保密')
);
INSERT INTO test_enum1(sex) values('男');
INSERT INTO test_enum1(sex) values('男1');
-- 可以插入NULL
INSERT INTO test_enum1(sex) values(null);
-- 编号从1开始 3对应保密 5不能插入
INSERT INTO test_enum1(sex) values(1);
INSERT INTO test_enum1(sex) values(3);
INSERT INTO test_enum1(sex) values(5);
-- 测试set 不区分大小写
CREATE TABLE test_set1(
  a SET('A','B','C','D','E','F')
);

INSERT INTO test_set1(a) VALUES('A');
INSERT INTO test_set1(a) VALUES('A,B,C');
INSERT INTO test_set1(a) VALUES('C,F,A');
INSERT INTO test_set1(a) VALUES(2);
-- HH:MM:SS [D HH:MM:SS] D表示天数 0~34 
-- 测试TIME类型
CREATE TABLE test_time(
  a TIME
);

INSERT INTO test_time(a) VALUES('12:23:34');
INSERT INTO test_time(a) VALUES('2 12:23:34');
INSERT INTO test_time(a) VALUES('22:22');
-- HHMMSS
INSERT INTO test_time(a) VALUES('121234');
INSERT INTO test_time(a) VALUES(0);

-- 插入当前时间
INSERT INTO test_time(a) VALUES(NOW());
INSERT INTO test_time(a) VALUES(CURRENT_TIME);
-- 测试DATE类型 YYYY-MM-DD YYYYMMDD
CREATE TABLE test_date(
  a DATE
);

INSERT INTO test_date(a) VALUES('2017-03-04');
INSERT INTO test_date(a) VALUES('40071212');
INSERT INTO test_date(a) VALUES('4007@12@12');
INSERT INTO test_date(a) VALUES('4007#12#12');
INSERT INTO test_date(a) VALUES('4007.12.12');
-- 70~99 转换成1970~1999  00~69 转换成2000~2069
INSERT INTO test_date(a) VALUES('780912');
INSERT INTO test_date(a) VALUES('181112');
INSERT INTO test_date(a) VALUES(NOW());
INSERT INTO test_date(a) VALUES(CURRENT_DATE);
-- 测试DATETIME

CREATE TABLE test_datetime(
  a DATETIME
);

INSERT INTO test_datetime(a) VALUES('1988-02-12 13:33:58');
INSERT INTO test_datetime(a) VALUES('721230121326');
INSERT INTO test_datetime(a) VALUES(NOW());
-- 测试TIMESTAMP
CREATE TABLE test_timestamp(
  a TIMESTAMP
);

INSERT INTO test_timestamp(a) VALUES('1988-02-12 13:33:58');
-- 获取当前时间
INSERT INTO test_timestamp(a) VALUES(CURRENT_TIMESTAMP);
--  测试主键
CREATE TABLE test_primary_key(
  id INT unsigned PRIMARY KEY,
  username VARCHAR(20)
);

INSERT INTO test_primary_key(id,username) VALUES (1,'king');
INSERT INTO test_primary_key(id,username) VALUES (1,'alan');

--  测试主键 可以省略PRIMARY
CREATE TABLE test_key(
  id INT unsigned KEY,
  username VARCHAR(20)
);
-- 也可以主键最后写
CREATE TABLE test_primary_key1(
  id INT unsigned ,
  username VARCHAR(20),
  PRIMARY KEY(id)
);

-- 复合主键
CREATE TABLE test_primary_key2(
  id INT UNSIGNED,
  courseId INT UNSIGNED,
  username VARCHAR(20),
  email VARCHAR(50),
  PRIMARY KEY(id,courseId)
);

-- 测试AUTO_INCREMENT  需要和主键一起使用
CREATE TABLE test_auto_increment1(
  id INT UNSIGNED KEY AUTO_INCREMENT,
  username VARCHAR(20)
);


INSERT INTO test_auto_increment1(username) VALUES('A');
INSERT INTO test_auto_increment1(username) VALUES('B');
INSERT INTO test_auto_increment1(username) VALUES('C');
INSERT INTO test_auto_increment1(username) VALUES('D');

INSERT INTO test_auto_increment1(id,username) VALUES(NULL,'E');
INSERT INTO test_auto_increment1(id,username) VALUES(DEFAULT,'F');
INSERT INTO test_auto_increment1(id,username) VALUES(15,'G');
-- 用户表  
CREATE TABLE IF NOT EXISTS `alan_user1`(
    `id` INT UNSIGNED KEY AUTO_INCREMENT COMMENT '用户编号',
    `username` VARCHAR(20) NOT NULL COMMENT '用户名', 
    `password` CHAR(32) NOT NULL UNIQUE  COMMENT '用户密码',
    `email` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户邮箱',
    `age` TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT '年龄', 
    `card` CHAR(18) NOT NULL UNIQUE COMMENT '身份证',
    `tel` CHAR(11) NOT NULL UNIQUE COMMENT '电话号',
    `salary` FLOAT(8,2) UNSIGNED COMMENT '薪水',
    `married` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '代表未结婚',
    `addr` VARCHAR(100) NOT NULL DEFAULT '北京' COMMENT '地址',
    `sex` ENUM('男','女','保密') NOT NULL DEFAULT '保密' COMMENT '性别'
)ENGINE=INNODB CHARSET=UTF8;

数据表操作

在表中添加或删除字段

-- 测试添加和删除字段
CREATE TABLE IF NOT EXISTS user5(
  id INT UNSIGNED AUTO_INCREMENT KEY
);

-- 添加用户名字段
ALTER TABLE user5 ADD username VARCHAR(20) NOT NULL AFTER id;
-- 删除字段
ALTER TABLE user5 DROP username;
-- 添加age、addr字段,删除email字段
ALTER TABLE user5
ADD age TINYINT UNSIGNED NOT NULL DEFAULT 18,
ADD addr VARCHAR(100) NOT NULL DEFAULT '北京',
DROP username;

添加和删除默认值

MODIFY和CHANGE关键字使用

-- 测试修改字段类型、字段属性、字段名称
CREATE TABLE user6(
  id INT UNSIGNED AUTO_INCREMENT KEY,
  username VARCHAR(5) NOT NULL UNIQUE,
  password CHAR(32) NOT NULL,
  email VARCHAR(10) NOT NULL
);

-- 将用户名字段类型改为20
ALTER TABLE user6 
MODIFY username VARCHAR(20) NOT NULL ;
-- 将username 名称改为user
ALTER TABLE user6
CHANGE username user VARCHAR(30) NOT NULL;

主键和唯一索引操作

-- 测试添加和删除主键
CREATE TABLE user4(
  id INT UNSIGNED,
  username VARCHAR(20) NOT NULL
);

-- 添加主键
ALTER TABLE user4
ADD PRIMARY KEY(id);

-- 删除主键
ALTER TABLE user4
DROP PRIMARY KEY;

--如果有AUTO_INCREMENT应该先删除 再删除主键
CREATE TABLE user7(
  id INT UNSIGNED AUTO_INCREMENT KEY,
  username VARCHAR(20) NOT NULL
);
-- 第一步AUTO_INCREMENT去掉
ALTER TABLE user7
MODIFY id INT UNSIGNED;
-- 第二部 删除主键
ALTER TABLE user7
DROP PRIMARY KEY;
-- 添加和删除唯一索引

CREATE TABLE user6(
  id INT UNSIGNED AUTO_INCREMENT KEY,
  username VARCHAR(20) NOT NULL UNIQUE,
  password CHAR(32) NOT NULL,
  email VARCHAR(50) NOT NULL UNIQUE
);

-- 查看表结构,索引没有命名,默认设置名字与字段名称一致
SHOW CREATE TABLE USER6;

 USER6 | CREATE TABLE `USER6` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` char(32) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

-- 删除username索引
ALTER TABLE user6
DROP INDEX username;

-- 添加username索引(没加名字)
ALTER TABLE user6
ADD UNIQUE INDEX(username);
-- 添加username索引(加名字user_index)
ALTER TABLE user6
ADD UNIQUE INDEX user_index (username);

重命名表

MySQL常用存储引擎

MyISAM存储引擎

-- 测试MyISAM存储引擎
CREATE TABLE test_myisam(
  a INT UNSIGNED,
  b VARCHAR(20),
  c CHAR(32)
)ENGINE=MyISAM;

CREATE TABLE myisam_1(
  a char(30),
  id int
)ENGINE=MyISAM;

-- 查看表状态
SHOW TABLE STATUS LIKE 'myisam_1' \G;

-- 强制设置为静态表
CREATE TABLE myisam_2(
  a VARCHAR(20)
)ENGINE=MyISAM ROW_FORMAT=FIXED;

InnoDB存储引擎

上一篇下一篇

猜你喜欢

热点阅读