补一些最基础最基础的知识。。
mysql -u root -p //linux中进入mysql
net start mysql; //启动mysql服务
net stop mysql; //关闭mysql服务
show databases; //查看已有哪些数据库
use databases; //进入某个数据库
select database()//查看当前use的是哪个database
drop database test; //删除名为test的数据库
drop table test;//删除名test的表
use test; //进入名为test的数据库
先跳到19章学习数据插入先。
有这么几种使用方法:
- 插入完整的行
- 插入行的一部分
- 插入多行
- 插入某些查询的结果
可是呢,一通瞎插入的话可能会有安全问题,但是不要紧,我们MySQL有安全机制。后面会学到。
这里都是insert, insert语句一般不会产生输出。
INSERT INTO Customers
VALUES (NULL,
'Pep E. LaPew'
'100 Main Street' ,
'Los Angeles',
'CA',
' 90046'
' USA'
NULL,
NULL);
上述语法简单,但是并不安全,因为这样的句子高度依赖表中列的定义次序。最好按照下面的方式写:
INSERT INTO Customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
VALUES ('Pep E. LaPew',
'100 Main Street' ,
'Los Angeles',
'CA',
' 90046'
' USA'
NULL,
NULL,
NULL);
一一对应很清晰,就是写起来的时候有点麻烦。
这种写法必须给每个列出的列一个值。当然也可以省略几个列。
想要省略列的时候需要满足下面的某一个条件:(|)
- 该列定义为允许NULL值
- 在表定义中给出默认值。
INSERT low_priority into
这样写可以降低insert 的优先级,同样适用于update和delete语句。
插入多个行:
insert into customers(name, address) values('a','b' ), values('c','d');
这种插入多个行的方式可以提高数据库处理的性能。因为这种插入较快。
insert into customers(name, address) select name,address from custnew;
这个操作可以把custnew中的数据插入到customers中,并且是有几行就插入几行。没有就不插。
关于更新和删除数据
关于更新
- 更新表中的特定行
- 更新表中的全部行
很简单
update customers set email = '[email protected]' where name = 'zzh';
update customers set email = '[email protected]', name='zzz' where id=1005;
这里可以使用子查询,关于子查询之后在学
可以用update删除某个列的值, 直接update成NULL就欧克了
update customers set email=NUlL where id = 1005;
关于删除
删除特定的行
删除所有的行
delete from customers where id = 1006;
delete 用来删除整行,而不是列,删除列的话用update,上面记了。
要想删除表中所有数据,还有一个语句
truncate table test;
这个速度更快,因为这个是先删除原来的表再重新创建一个表出来。而不是逐行删除表中的数据。
千万注意:MySQL没有撤销按钮,一定要小心翼翼 的update和delete。
创建和操纵表
表的创建:
create table test if not exist
(
id int not NULL auto_increment,
name char(50) not null,
quantity int not null default 1,
primary key(num, item)
)engine=innodb;
注意’'这样的结构(两个单引号中间没有空格)并不是NULL;
关于主键
primary key(num, item)
这样可以设置两个主键,但是要保证num和item的组合需要保持唯一。当然主键只能not NULL
关于auto_increment
这个会自动增量
当然被设置了auto_increment的,也可以被指定数字,只要是唯一的就行,然后接下来的数字都会基于这个指定的数据递增。
可以使用last_insert_id()函数来获取最后一个auto_increment值。
select last_insert_id();
可以使用default 来指定默认值。由上面的test的例子可见。
注意:与大多数DBMS不一样,MySQL不允许使用函数作为默认值!!只能用常量。
关于引擎类型
MySQL有一个具体管理和处理数据的内部引擎,用create table语句时,该引擎创建表,在使用select语句或其他数据处理时,该引擎在内部处理你的请求。多数时候,此引擎都隐藏在DBMS内,无需特别关注。
但是MySQL不一样,它具有多种引擎。这些引擎都隐藏在MySQL服务器内,全部能执行create table 和select 等等命令。
那为什么要发行多种引擎呢?
因为他们各自具有各自不同的功能和特性,为不同的任务选择正确的引擎能获得良好的功能和灵活性。
如果省略engine=语句,那就会使用默认引擎。很可能是MyISAM
列举几个需要知道的引擎:
- InnoDB是一个可靠的事务处理引擎。但不支持全文本搜索。
- MEMORY功能上等同于MyISAM,但是数据是储存在内存中而不是硬盘,所以速度很快,因此特别适合于临时表。
- MyISAM是一个性能极高的引擎,支持全文本搜索,但不支持事务处理。
引擎类型可以混用。
但是注意:外键不能跨引擎。
关于更新表
alter table vendors
add phone char(20);
增加一个列
alter tabke vendors
drop column phone;
删去一个列
alter 还有一种常见的用途是定义外键。
删除表
drop table cust;
重命名表
rename table cust to zzh;