MySQL Veri Ekle Soru

3 Cevap php

Zaten aşağıdaki gibi MySQL bir tablo oluşturulur varsayıyorum

CREATE TABLE IF NOT EXISTS `sales` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `client_id` smallint(5) unsigned NOT NULL,
  `order_time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `sub_total` decimal(8,2) NOT NULL,
  `shipping_cost` decimal(8,2) NOT NULL,
  `total_cost` decimal(8,2) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Dumping data for table `sales`
--

Ben mevcut tablo için yeni bir alan must_fill ilave edin.

 `must_fill` tinyint(1) unsigned NOT NULL,

Kullanıcı sadece aşağıda komut dosyası gibi, defaultly masaya fiels öğelerin sayısından daha az ekleyebilirsiniz.

INSERT INTO `sales` (`id`, `client_id`, `order_time`, `sub_total`, `shipping_cost`, `total_cost`) VALUES
(8, 12312, '2007-12-19 01:30:45', 10.75, 3.00, 13.75);

Bu iyi.

Kullanıcı planı yeni veri içine eklemek Ama nasıl verileri içermelidir alanına alan (must_fill) yapılandırabilirsiniz.

BTW, kod PHP script entegre edilecek.

[update] Or, can I only write special PHP script to judge must_fill is null or not when user try to run a Insert Into script binded some data values?

3 Cevap

Bu MySQL oldukça bu şekilde tasarlanmış asla bu uygulamak zordur. MySQL tablo bir NOT NULL atama sadece değer olamaz anlamına gelir NULL, değil bir değer must sağlanabilir: o ise MySQL varsayılan bulacaksınız atlanmış. Ancak, bir gerçek bir ihmal ise can sıkıcı olurdu varsayılan bir değer sağlayabilir; tam olarak ne kullanmak için uygulamaya bağlıdır.

Ben de MySQL Server Modes bakmak olacaktır. Sen STRICT_ALL_TABLES etkinleştirmek isteyebilirsiniz, ama bu oldukça acımasız bir ayardır ve MySQL'in gevşek varsayılan rejimine karşı programlanmış olmuşsa muhtemelen uygulama kıracak.

Hatta bir check constraint bir tamsayı için örtülü varsayılan ekleme gelen MySQL engeller:

create table YourTable (
  id int primary key
, must_fill tinyint not null
, constraint must_fill_constraint check (must_fill <> 0)
);
insert into YourTable (id) values (1);
select must_fill from YourTable t1;

Bu baskılar 0, yasaklayan bir kısıtlama olsa bile 0. Bu davranışı değiştirmek benim sağlayan strict mode.

Eğer "katı mod" belirtmek yoksa MySQL sıfır için must_fill gibi bir tamsayı sütun varsayılan olacaktır. Eklemeyi deneyin

SET OTURUM sql_mode = STRICT_ALL_TABLES

hiçbir değer must_fill sütun için sağlanan çünkü INSERT ve INSERT örnek bir hataya üretmek gerekir önce.

Eğer MySQL daemon başlattığınızda, bir komut satırı seçeneği olarak sıkı modunu ayarlayabilirsiniz. Detaylar aşağıda söz MySQL modu dokümantasyon sayfasında.

MySQL modes http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html