Mysql数据库笔记
出错记录:
1、mysql服务启动不了,进程意外终止 1067
错误显示:can not connect to mysql server on local hosts(1061)
解决方法:原来是我傻逼把原来的MySQL数据库给删掉了
2、服务已经启动,但是输入密码时 进不去
错误显示:ERROR 1045 <28000>:Access denied for user'root'@'locahost'<using password:YES>
解决方法:http://blog.sina.com.cn/s/blog_759a5a7c01017dj0.html
3、
默认端口号:3306
把mysql的bin目录添加到环境变量中就可以在任意目录下都可以打开bin目录了。
之前看到的root@localhost这些是因为别人改了提示符:
mysql>prompt \u@ \h \d>
\u表示当前用户 \h表示服务器名称 \d表示当前数据库
MySQL语句规范:
关键字和函数名称全部大写;
数据库名称、表的名称、字段的名称全部小写;
SQL语句必须以分好结尾。
加中括号表示可以省略
显示当前版本;
mysql>SELECT VERSION();
显示当前时间;
mysql>SELECT NOW();
显示当前用户;
mysql>SELECT USER();
修改原始密码:
打开命令提示符界面, 执行命令: mysqladmin -u root -p password 新密码
执行后提示输入旧密码完成密码修改, 当旧密码为空时直接按回车键确认即可。
开始:
//创建数据库:
MySQL>CREATE DATABASE (IF NOT EXISTS) case;
//显示已经存在的数据库;
MySQL>SH0W DATABASES;
//重命名数据库名称
先关闭数据库,然后找到文件夹所在目录,更改文件夹名称。
//显示某个数据库;
MySQL>SHOW CREATE DATABASE case;
//更改数据库编码为utf8;
MySQL>ALTER DATABASE case CHATACTER SET=utf8;
//删除数据库:
MySQL>DROP DATABASE case;
修改和删除
修改默认值:
ALTER TABLE TB_NAME ALTER 字段名 SET DEFAULT 默认值;
ALTER TABLE TB_NAME ALTER 字段名 DROP DEFAULT ;
修改表名
ALTER TABLE 表名 RENAME TO 新名;
修改字段名
ALTER TABLE 表名 CHANGE 旧字段 新字段 新字段数据类型
修改字段数据类型
ALTER 表名 MODIFY 属性名 数据类型
增加字段
ALTER TABLE 表名 ADD 字段1 字段1的条件 [FIRST | AFTER 字段2];
删除字段
ALTER TABLE 表名 DROP 字段;
修改字段的排列位置:
ALTER TABLE 表名 MODIFY 字段1 字段1数据类型 FIRST|AFTER 字段2;
更改表的存储引擎:
ALTER TABLE 表名 ENGINE=引擎名
添加主键约束:
ALTER TABLE 表名 ADD PRIMARY KEY (外键名)
删除外键约束:
ALTER TABLE 表名 DROP FOREIGN KEY (外键别名)
修改数据表的名称:
ALTER TABLE table_name RENAME TO new_table_name
删除记录:
delete from users where id=1;
修改记录:
update 表名 set 字段=新值 where 条件;
update users set id=1 whers sex=1;
表字段的修改:
增加字段
ALTER table tb_name ADD column_name 属性 位置; //增加一个字段,默认为空
alter table user add COLUMN new2 VARCHAR(20) NOT NULL; //增加一个字段,默认不能为空
删除字段
alter table user DROP COLUMN new2; //删除一个字段
alter table user DROP column1,column2; //删除多列
修改一个字段
alter table user MODIFY new1 VARCHAR(10); //修改一个字段的类型
alter table user CHANGE new1 new4 int; //修改一个字段的名称,此时一定要重新指定该字段的类型
第二章:
1、数据类型:
整型:
TINYINT -2^7->2^7-1
SMALLINT -2^15->2^15-1
MEDIUMINT -2^23->2^23-1
INT -2^31->2^31-1
BIGINT -2^63->2^63-1
浮点型:
FLOAT[(M,D)] m代表总位数,d代表小数点后位数
DOUBLE[(M,D)]
时间日期型:(了解)
YEAR 1个字节
TIME 3
DATE 3
DATETIME 8
TIMESTAMP 4
字符型:
CHAR(M) 0<=M<=255
VARCHAR(M)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM('value1,'value2'...)
SET('value1','value2',,,)
2、数据表的操作
打开数据库:
USE test(数据库名称)
创建数据表:
CREATE TABLE (IF NOT EXISTS) table_name<数据表名字>(column_name<根据项目大小确定的列名>data_type<数据类型>,..)
mysql>USE TEST;
>CREATE TABLE tb1(
>username VARCHAR(20),
>age TINYINT UNSIGNED,<unsigned意思是不要负数>
>salary FLOAT(8,2) UNSIGNED <float(8,2)的意思是总共有8位数,其中小数点后有2位)>
>);
查看数据表列表
SHOW TABLES FROM test;
查看数据表结构
SHOW COLUMNS FROM TB1;
插入记录INSERT
INSERT [INTO] tb1_name [(col_name,,,)] VALUES(val,,,)
INSERT TB1 (username ,salary) VALUES ('tom',26,919.3);
插入的也可以是算式比如:33-2 或者函数式:MD5('342')
也可以一次插入多条记录,记录间用,分开就行。
记录查找SELECT
SELECT * FROM TB1_NAME
3、空值与非空
NULL 字段值可以为空 NOT NULL 字段禁止为空
创建表,设定某些量空与非空
>CREATE TABLE TB2(
>username VARCHAR(20) NOT NULL,
>age TINYINT UNSIGNED NULL,
>);
>INSERT TB2 VALUES(NULL,20);
<将报错说username不可为空>
4、自动编号(AUTO_INCREMENT)不能用char类型
自动编号,且需与主键组合使用
默认情况下,起始值为1,每次的增量为1;
5、主键约束(PRIMARY KEY)
每张数据表只存在一个主键
主键保证记录的唯一性
主键自动为not null
多个字段联合主键:
PRIMARY KEY(username,age);
>CREATE TABLE TB2(
>id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
AUTO_INCREMENT(自动递增)必须和PRIMARY KRY一起使用,而PRIMARY KEY则不一定要和AUTO_INCREMENT一起使用
>username VARCHAR(20) NOT NULL,
>);
>SHOW COLUMNS FROM TB3;
6、唯一约束(UNIQUE KEY)
唯一约束
唯一约束可以保证记录的唯一性
唯一约束的字段可以为NULL
每张数据表可以存在多个唯一约束
与主键的区别:一张数据表只能有一个主键,而UNIQUE KEY可以有多个可以NULL
>CREATE TABLE TB4(
>id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,<自动编号字段>
>username VARCHAR(20) NOT NULL UNIQUE KEY,
>age TINYINT UNSIGNED
>);
插入记录:INSERT TB4(username,age) VALUES('TOM',23);
当再次写入同样的记录时,将提示错误,因为username用了unique约束。可想而知这个约束在数据表里可以有多个。
7、默认约束(DEFAULT)
默认值
当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
>CREATE TABLE TB5(
>id SAMLLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
>username VARCHAR(20) NOT NULL UNIQUE KEY,
>sex ENUM('1','2','3') DEFAULT '3'
>);
验证:
INSERT TB5(username)VALUES('TOM');
将发现自动给sex赋值3了。
8、外键约束
要求:
表与表之间的链接
父表和子表必须使用相同的储存引擎(InnoDB),而禁止使用临时表:
外键列和参照列必须具有相识的数据类型。其中数字的长度或是否有符号位必须相同;而字符 的长度则可以不同
外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
CREATE TABLE provinces(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(20) NOT NULL
);
查看数据表的引擎:show create table provinces;
CREATE TABLE users(
id SMALLINT UNSIGNED PRIMARU KEY AUTO_INCREMENT,
username VARCHAR(10) NOT NULL,
//添加省份的话可以不用添加字段,只要添加关系表省份的编号就行
pid SMALLINT UNSIGNED,
FOREIGN KEY(pid)REFERENCES provinces(id)
);
查看索引:SHOW INDEXES FROM provinces\G;
SHOW INDEXES FROM users\G;
外键约束的参数:
CASCADE:从父表删除或更新且自动删除或更新字表中匹配的行
SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL,如果使用该选项,必须保证 子表列没有指定NOT NULL
TESTRICT(约束、限制):拒绝对父表的删除或更新操作
NO ACTION:标准的SQL的关键字,在MySQL中RESTRICT相同。
为自动编号的字段赋值
可以书写成default 或者null
创建表:
CREATE TABLE users(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
password VARCHAR(32) NOT NULL DEFAULT 123,
age TINYINT UNSIGNED NOT NULL,
sex BOOLEAN
);
插入记录:
INSERT users VALUES(NULL,'Jack',159357,20,1);
9、